In base a MSDN, il comando /Zp
assume come valore predefinito 8, il che significa che vengono utilizzati i limiti di allineamento a 64 bit. Ho sempre pensato che per le applicazioni a 32 bit, il compilatore MSVC utilizzerà i limiti a 32 bit. Per esempio:Allineamento memoria predefinita MSVC di 8
struct Test
{
char foo;
int bar;
};
il compilatore pad in questo modo:
struct Test
{
char foo;
char padding[3];
int bar;
};
Quindi, dal momento che /Zp8
viene utilizzato per default, significa che il mio imbottitura diventa 7 + 4 byte utilizzando lo stesso esempio di cui sopra:
struct Test
{
char foo;
char padding1[7];
int bar;
char padding2[4];
}; // Structure has 16 bytes, ending on an 8-byte boundary
Questo è un po 'ridicolo, non è vero? Sto fraintendendo? Perché è utilizzata una così grande imbottitura, sembra uno spreco di spazio. La maggior parte dei tipi su un sistema a 32 bit non utilizzerà nemmeno i 64 bit, quindi la maggior parte delle variabili avrebbe il padding (probabilmente oltre l'80%).
Puoi chiarire il '7 + 4'? Sono alquanto confuso dalla domanda in questo momento. – Mysticial
@Mysticial: Ho aggiornato il mio OP con un altro esempio per mostrarvi cosa intendo con questo. Dispiace per la confusione. –
Grazie per il chiarimento. Ho appena testato la tua prima struttura e la dimensione è di soli 8 byte, riempita con il secondo snippet di struct. Quindi non sono in grado di riprodurre ciò che stai ricevendo. (o almeno quello che pensi che dovresti ottenere) – Mysticial