Оператор __alignof

Блок, относящийся только к системам Microsoft

Возвращает значение типа size_t, которое является требованием к выравниванию типа.

__alignof( 
   type  
)

Заметки

Например:

Выражение

Значение

__alignof( char )

1

__alignof( short )

2

__alignof( int )

4

__alignof( __int64 )

8

__alignof( float )

4

__alignof( double )

8

__alignof( char* )

4

Значение __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));

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

См. также

Ссылки

Выражения с унарными операторами

Ключевые слова в C++