Оператор 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
компилятора (отключить расширения языка).
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по