Определяет выравнивание полей.
Field может быть использована для упаковки
Types
или
Unions более плотно, чем по
умолчанию. Наиболее часто используемым значением является
Field = 1,
что приводит
Type или
Union к плотной упаковке, как только
возможно, без добавления байт между полями или в конце
Type.
Field
может быть использован только для уменьшения выравнивания поле, но не может
быть использован для его увеличения. Для того, чтобы добавить байты
заполнения,
Union с соответствующими элементами могут быть
использованы.
Компоновка по умолчанию
Type и
Union структур в FreeBASIC
следует GCC ABI. Это дает совместимость с другими компиляторами или языками
такими как C.
По умолчанию поля выравниваются соответствуют их естественным границам,
которые являются:
- Кратно 1 для 1-байтовых типов данных
- Кратно 2 для 2-байтовых типов данных
- Кратна 4 для 4-байтовых типов данных
- Кратна 4 для 8-байтовых типов данных (Linux & другие не-Win32 системы
только)
- Кратна 8 для 8-байтовых типов данных (Win32 только)
- Огромные границы для Type/Union типов данных
Дескрипторы динамических строк обрабатываются как структуры
Type
с полями данных указателей, имеют огромные выравнивания.
Строки фиксированной длины выровнены согласно выравниванию для размера
символа.
Статические массивы выровнены согласно выравниванию для элемента типа
данных.
Компилятор выравнивает поля, вставив байты заполнения перед ними для того,
чтобы переместить их смещение, которое соответствует их естественной
границе, или кратно значению с
Field, если это меньше, чем
естественное выравнивание поля. На архитектуре x86 такие выравнивания не
требуется, но могут привести к лучшей производительности при доступе к
полям. Другие архитектуры могут требовать надлежащего выравнивания.
Кроме того весь размер структуры округляется до нескольких крупнейших
естественных выравниваний его полей, путем добавления байтов заполнения в
конце структуры. Это гарантирует, что в массиве
Type, каждый
индивидуальный элемент правильно выровнен в соответствии с полем.
См. также