¿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?

Respuestas a la pregunta(1)

Su respuesta a la pregunta