Согласно 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%).