Согласно MSDN , команда / Zp
по умолчанию имеет значение 8, что означает использование 64-битных границ выравнивания. Я всегда предполагал, что для 32-битных приложений компилятор MSVC будет использовать 32-битные границы. Например:
struct Test
{
char foo;
int bar;
};
Компилятор заполнит его следующим образом:
struct Test
{
char foo;
char padding[3];
int bar;
};
Итак, поскольку / Zp8
используется по умолчанию, означает ли это, что мое заполнение станет 7 + 4 байта, используя тот же пример выше:
struct Test
{
char foo;
char padding1[7];
int bar;
char padding2[4];
}; // Structure has 16 bytes, ending on an 8-byte boundary
Это немного смешно, не правда ли? Я не понимаю? Почему используется такая большая набивка, это кажется пустой тратой места. Большинство типов в 32-битной системе даже не будут использовать 64-битные, поэтому у большинства переменных будет заполнение (вероятно, более 80%).