Одним из них является выравнивание элементов данных - их расположение в памяти по отношению к адресам, кратным четырем, восьми или 16 байтам.В 16-разрядной архитектуре Intel выравнивание данных мало влияло на производительность, и его использование было совершенно необязательным.В соответствии с IA-32 правильное выравнивание данных может быть важной оптимизацией, хотя его использование по-прежнему является необязательным, за очень немногими исключениями, где правильное выравнивание является обязательным.Однако 64-битная среда предъявляет более строгие требования к элементам данных.Выровненные объекты вызывают программные исключения.Чтобы элемент был правильно выровнен, он должен отвечать требованиям, предъявляемым 64-разрядной архитектурой Intel (обсуждается в ближайшее время), а также требованиям компоновщика, использованного для создания приложения.
Основное правило выравнивания данных заключается в том, чтосамый безопасный (и наиболее широко поддерживаемый) подход основан на том, что Intel называет «естественными границами».Это те, которые возникают, когда вы округляете размер элемента данных до следующего наибольшего размера в два, четыре, восемь или 16 байт.Например, 10-байтовое число с плавающей точкой должно быть выровнено по 16-байтовому адресу, тогда как 64-битные целые числа должны быть выровнены по восьмибайтовому адресу.Поскольку это 64-разрядная архитектура, размеры указателя имеют ширину восемь байтов, и поэтому они также должны выравниваться по восьмибайтовым границам.
Рекомендуется, чтобы все структуры размером более 16 байтов выравнивались по 16-байтовымграницы.В общем, для лучшей производительности выровняйте данные следующим образом:
- Выровняйте 8-битные данные по любому адресу
- Выровняйте 16-битные данные, которые должны содержаться в выровненном четырехбайтовомword
- Выравнивание 32-битных данных так, чтобы его базовый адрес был кратным четырем
- Выравнивание 64-битных данных так, чтобы его базовый адрес был кратным восьми
- Align80-битные данные, так что его базовый адрес кратен шестнадцати
- Выровнять 128-битные данные так, чтобы его базовый адрес был кратен шестнадцати
64-байт или большеструктура данных или массив должны быть выровнены так, чтобы их базовый адрес был кратным 64. Сортировка данных в порядке уменьшения размера является одной эвристикой для помощи в естественном выравнивании.Поскольку 16-байтовые границы (и строки кэша) никогда не пересекаются, естественное выравнивание не является строго необходимым, хотя это простой способ обеспечить соблюдение общих рекомендаций по выравниванию.
Правильное выравнивание данных в структурах может привести краздувание данных (из-за заполнения, необходимого для правильного размещения полей), поэтому, где это необходимо и возможно, полезно реорганизовать структуры так, чтобы поля, которые требуют наиболее широкого выравнивания, были первыми в структуре.Подробнее о решении этой проблемы читайте в статье «Подготовка кода для архитектуры IA-64 (Code Clean)».