Требуется ли, чтобы размер структуры был точным кратным выравниванию этой структуры?

Я снова подвергаю сомнению давнее убеждение.

До сегодняшнего дня я считал, что выравнивание следующей структуры обычно равно 4, а размер обычно равен 5 ...

struct example
{
  int   m_Assume_32_Bits;
  char  m_Assume_8_Bit_Bytes;
};

Из-за этого предположения у меня есть код структуры данных, который использует offsetof для определения расстояния в байтах между двумя соседними элементами в массиве. Сегодня я заметил какой-то старый код, который использовал sizeof там, где не должен, не мог понять, почему у меня не было ошибок, написал модульный тест - и тест удивил меня, пройдя.

Немного Исследования показали, что размер типа, который я использовал для теста (аналогичный структуре выше), был точным кратным выравниванию - то есть 8 байтов. Он имел отступ после последнего члена. Вот пример того, почему я этого не ожидал ... m тоже заинтересован в этом, но основное внимание уделяется C ++.

17
задан Community 23 May 2017 в 12:02
поделиться