В книги Вирта "Конструирование компиляторов" есть глава о том, как данные представляются во время исполнения, где говорится, что если данные не выровненные, то может потребоваться два обращения к памяти, для чтения какого-нибудь поля и необходимо выравнивать поля в структурах по границе слов.
Допустим, есть структура RECORD a: CHAR; b: INTEGER END; то поле a, допустим будем иметь смещение 0 (от начала структуры), а поле b смещение 4.
Чаще всего никто не обращает на это никакого внимания, но иногда требуется передавать данные между различными системами и может так случится, что настройки выравнивания там другие. В языке C++ есть специальная конструкция для задания параметров выравнивания #pragma pack(x)

И мне пришла идея, а почему бы не отказаться от автоматического выравнивания, а выравнивать поля всегда явно.
Если кто-то хочет, чтобы обращение к полю b происходило по адресу кратному 4, то можно просто создать структуру RECORD a: CHAR; dummy: ARRAY 3 OF CHAR; b: INTEGER END; а по умолчанию выравнивание не использовать.

В этом случае размер структуры всегда будет равен сумме размеров его членов, а не округленному в большую сторону размеру. И можно будет создавать такие типы данных, как, например, WCHAR = RECORD c1, c2: CHAR END и использовать массив таких символов, как аналог типа wchar_t.

Кто что думает по этому поводу?