Выравнивание памяти MSVC по умолчанию - 8

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

5
задан void.pointer 7 December 2011 в 04:48
поделиться