Я снова подвергаю сомнению давнее убеждение.
До сегодняшнего дня я считал, что выравнивание следующей структуры обычно равно 4, а размер обычно равен 5 ...
struct example
{
int m_Assume_32_Bits;
char m_Assume_8_Bit_Bytes;
};
Из-за этого предположения у меня есть код структуры данных, который использует offsetof для определения расстояния в байтах между двумя соседними элементами в массиве. Сегодня я заметил какой-то старый код, который использовал sizeof там, где не должен, не мог понять, почему у меня не было ошибок, написал модульный тест - и тест удивил меня, пройдя.
Немного Исследования показали, что размер типа, который я использовал для теста (аналогичный структуре выше), был точным кратным выравниванию - то есть 8 байтов. Он имел отступ после последнего члена. Вот пример того, почему я этого не ожидал ... m тоже заинтересован в этом, но основное внимание уделяется C ++.