Оператор alignof

Оператор alignof возвращает выравнивание в байтах указанного типа в виде значения типа size_t.

Синтаксис

alignof( type )

Remarks

Пример:

Expression Значение
alignof( char ) 1
alignof( short ) 2
alignof( int ) 4
alignof( long long ) 8
alignof( float ) 4
alignof( double ) 8

Значение alignof совпадает со значением для sizeof базовых типов. Однако рассмотрим следующий пример.

typedef struct { int a; double b; } S;
// alignof(S) == 8

В этом случае alignof значение является требованием выравнивания самого большого элемента в структуре.

Аналогичным образов, в

typedef __declspec(align(32)) struct { int a; } S;

alignof(S) равно 32.

Один из вариантов alignof использования будет использоваться в качестве параметра для одной из собственных подпрограмм выделения памяти. Например, в следующей определенной структуре S можно вызвать подпрограмму выделения памяти с именем aligned_malloc для выделения памяти на определенной границе выравнивания.

typedef __declspec(align(32)) struct { int a; double b; } S;
int n = 50; // array size
S* p = (S*)aligned_malloc(n * sizeof(S), alignof(S));

Дополнительные сведения об изменении выравнивания см. в следующих разделах.

Дополнительные сведения о различиях в выравнивании в коде для 32- (x86) и 64-разрядных (x64) сред см. в статье

Специально для систем Майкрософт

alignof и __alignof являются синонимами в компиляторе Майкрософт. Прежде чем он стал частью стандарта в C++11, оператор, зависящий __alignof от Майкрософт, предоставил эту функцию. Для максимальной переносимости вместо оператора __alignof Майкрософт следует использовать alignof оператор.

Для совместимости с предыдущими версиями является синонимом, _alignof__alignof если не указан параметр /Za компилятора (отключить расширения языка).

См. также

Выражения с унарными операторами
Ключевые слова