De acuerdo con MSDN, el comando /Zp
tiene como valor predeterminado 8, lo que significa que se usan los límites de alineación de 64 bits. Siempre he supuesto que para las aplicaciones de 32 bits, el compilador de MSVC usará límites de 32 bits. Por ejemplo:Alineación de memoria predeterminada de MSVC de 8
struct Test
{
char foo;
int bar;
};
La almohadilla compilador que de este modo:
struct Test
{
char foo;
char padding[3];
int bar;
};
lo tanto, ya /Zp8
Se utiliza por defecto, ¿significa que mi acolchado se convierte en 7 + 4 bytes utilizando el mismo ejemplo anterior:
struct Test
{
char foo;
char padding1[7];
int bar;
char padding2[4];
}; // Structure has 16 bytes, ending on an 8-byte boundary
Esto es un poco ridículo ¿no? ¿Estoy malentendido? ¿Por qué se usa un relleno tan grande? Parece una pérdida de espacio. La mayoría de los tipos en un sistema de 32 bits ni siquiera van a usar 64 bits, por lo que la mayoría de las variables tendrían relleno (probablemente más del 80%).
¿Puedes aclarar sobre el '7 + 4'? Estoy algo confundido por la pregunta en este momento. – Mysticial
@Mysticial: Actualicé mi OP con otro ejemplo para mostrarle lo que quiero decir con eso. Perdón por la confusion. –
Gracias por la aclaración. Acabo de probar tu primera estructura y el tamaño es de solo 8 bytes, rellenado a través del segundo fragmento de estructura. Por lo tanto, no puedo reproducir lo que obtienes. (o al menos lo que crees que deberías estar recibiendo) – Mysticial