Оператор alignof

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

Синтаксис

alignof( type )

Замечания

Например:

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 компилятора (отключить расширения языка).

См. также

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