Поделиться через


Статические выражения и объединения

К другим типам, таким как массивы, структуры и объединения, предъявляются более строгие требования к выравниванию, обеспечивающие согласованность хранения статистических выражений и объединений и извлечения данных.Далее приведены определения массива, структуры и объединения.

  • Массив
    Содержит упорядоченную группу смежных объектов данных.Каждый объект именуется элементом.Все элементы массива должны быть одного размера и принадлежать одному типу данных.

  • Структура
    Содержит упорядоченную группу объектов данных.В отличие от элементов массива, объекты данных внутри структуры могут принадлежать разным типам и иметь разный размер.Каждый объект данных в структуре называется членом.

  • Union
    Объект, содержащий любое из множества поименованных членов.Члены этого именованного набора могут быть любого типа.Область хранения, выделенная для объединения, равна области хранения, требующейся для члена этого объединения, имеющего наибольший размер, плюс заполнение, необходимое для выравнивания.

В нижеследующей таблице представлены строгие рекомендации по выравниванию для скалярных членов объединений и структур.

Скалярный тип

Тип данных C

Обязательное выравнивание.

INT8

char

Byte

UINT8

unsigned char

Byte

INT16

short

Word

UINT16

unsigned short

Word

INT32

int, long

Doubleword

UINT32

unsigned int, unsigned long

Doubleword

INT64

__int64

Quadword

UINT64

unsigned __int64

Quadword

FP32 (одиночной точности)

float

Doubleword

FP64 (двойной точности)

double

Quadword

POINTER

*

Quadword

__m64

struct __m64

Quadword

__m128

struct __m128

Octaword

Применяются следующие правила выравнивания статистических выражений:

  • Выравнивание массива аналогично выравниванию одного из элементов массива.

  • Выравнивание начальной части структуры или объединения является максимальным выравниванием любого отдельного члена.Каждый член внутри структуры или объединения должен быть размещен в соответствии со своим выравнивании, как определено в предыдущей таблице, для чего может потребоваться неявное внутреннее заполнение в зависимости от предыдущего члена.

  • Размер структуры должен быть целым числом, кратным его выравниванию, для чего может потребоваться заполнение после последнего члена.Поскольку структуры и объединения могут быть сгруппированы в массивы, каждый элемент массива в структуре или объединении должен начинаться и завершаться соответствующим предварительно определенным выравниванием.

  • Возможно выравнивание данных с превышением требований к выравниванию при условии соблюдения ранее установленных правил.

  • Отдельный компилятор может регулировать упаковку структуры из соображений ее размера.Например, /Zp (Выравнивание члена структуры) позволяет регулировать упаковку структур.

См. также

Ссылки

Типы и хранилище