Ich versuche, eine Speichersequenz zu durchlaufen und im Befehlsfenster anzuzeigen. Hier ist der Code:
int addr[10]; //Address addr is 32 bit
for{int i=0 ; i<10 ; i++}
{
int *p = &addr[i]; //Pointing to the 32 bit addresses from 0 to 9
cout<<p<<endl; //Display the pointed addresses
}
return 0;
}
Ausgang:
002AF948 //address of addr[0]
002AF94C //address of addr[1]
002AF950 //address of addr[2]
....upto i = 9
Frage: Sollte in der Ausgabe nicht 002AF949 statt 002AF94C die Adresse von addr[1] sein? Warum werden die Speicheradressen 002AF49, 002AF4A, 002AF4B übersprungen und dann die Adresse addr[1] als 002AF94C angezeigt? Dasselbe passiert auch mit addr[2].
Warum überspringt der Zeiger diese 32-Bit-Zwischenadressen, wenn er inkrementiert wird?
Da i
wird deklariert, dass int
4 Bytes benötigt werden, um jeden Wert von zu speichern i
. Da jede Adresse einem einzelnen Byte entspricht, werden 4 Stellen benötigt, um eine int
.
In Ihrem Fall,
002AF948 - 002AF94B
Zum Speichern von 0 ( 0x00000000
) wird Speicherbereich benötigt
002AF94C - 002AF94F
Zum Speichern von 1 ( 0x00000001
) wird Speicherbereich benötigt
Usw...
Vier Bytes sind 32 Bit, da ein Byte (normalerweise) 8 Bit ist.
In der Vergangenheit gab es einige exotische Ausnahmen von der 8-Bit-pro-Byte-Regel, aber ich glaube nicht, dass es sie noch gibt.
PsychedGuy
PsychedGuy
nidhin
002AF948 to 002AF94B
kann also nur 32 Bit speichern. Um 128 Bit zu speichern, benötigen Sie 16 Speicherplätze. Ein Adressbereich002AF948 to 002AF957
kann also 128 Bit speichern.