Читать книгу Ссылки и указатели в C++: от основ к безопасности и современному коду - - Страница 115
Задача 20: Комбинированная: sizeof, alignof, &
ОглавлениеВы должны написать программу, которая выводит три значения для структуры M, содержащей поля short s и long l: её размер в байтах, выравнивание в памяти и разницу в байтах между адресами этих двух полей. Используйте операторы sizeof и alignof, а также приведение адресов полей к char* для вычисления смещения между ними. Убедитесь, что вывод соответствует поведению компилятора на платформе с 8-байтовым выравниванием для типа long.
Подсказка: компилятор может вставлять промежуточные байты между полями структуры, чтобы удовлетворить требованиям выравнивания. Адрес каждого поля можно получить с помощью оператора взятия адреса &, а разницу между ними – приведя оба адреса к char* и вычтя один из другого. Помните, что порядок полей в структуре совпадает с их объявлением, и выравнивание всей структуры определяется самым строгим выравниванием среди её полей.