¿Por qué las variables de tipo de datos int consecutivas ubicadas en 12 bytes de desplazamiento en visual studio?
Para aclarar la pregunta, observe el fragmento de código c / c ++:
int a = 10, b = 20, c = 30, d = 40; //consecutive 4 int data values.
int* p = &d; //address of variable d.
Ahora, en Visual Studio (probado en 2013), si el valor de p == hex_value (que se puede ver en la ventana de memoria del depurador), puede observar que las direcciones para otras variables a, b, c y d son ¡cada uno con una diferencia de 12 bytes!
Así que sip == hex_value
, entonces sigue:
&c == hex_value + 0xC
(nota hex C es 12 en decimal)
&b == &c + 0xC
&a == &b + 0xC
Entonces, ¿por qué hay un desplazamiento de 12 bytes en lugar de 4 bytes - int son solo 4 bytes?
Ahora, si declaramos una matriz:
int array[] = {10,20,30,40};
¡Los valores 10, 20, 30, 40 están ubicados a 4 bytes de diferencia como se esperaba!
¿Alguien puede explicar este comportamiento?