Оператор __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));
Дополнительные сведения об изменении выравнивания см. в следующих разделах.
Примеры выравнивания структуры (только для x64)