Warum sind aufeinanderfolgende int-Datentypvariablen in Visual Studio um 12 Byte versetzt?
Beachten Sie zur Klärung der Frage das Codefragment c / c ++:
int a = 10, b = 20, c = 30, d = 40; //consecutive 4 int data values.
int* p = &d; //address of variable d.
Wenn Sie nun in Visual Studio (getestet 2013) den Wert p == hex_value (der im Debugger-Speicherfenster angezeigt wird) haben, können Sie beobachten, dass die Adressen für die anderen Variablen a, b, c und d sind jeweils mit 12 byte unterschied!
Also, wennp == hex_value
, dann folgt es:
&c == hex_value + 0xC
(Beachten Sie, Hex C ist 12 in Dezimal)
&b == &c + 0xC
&a == &b + 0xC
Warum gibt es also einen Versatz von 12 Bytes anstelle von 4 Bytes - int sind nur 4 Bytes?
Wenn wir nun ein Array deklarieren:
int array[] = {10,20,30,40};
Die Werte 10, 20, 30, 40 liegen erwartungsgemäß bei 4 Byte Unterschied!
Kann jemand bitte dieses Verhalten erklären?