Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The alignof
operator returns the alignment in bytes of the specified type as a value of type size_t
.
alignof( type )
For example:
Expression | Value |
---|---|
alignof( char ) |
1 |
alignof( short ) |
2 |
alignof( int ) |
4 |
alignof( long long ) |
8 |
alignof( float ) |
4 |
alignof( double ) |
8 |
The alignof
value is the same as the value for sizeof
for basic types. Consider, however, this example:
typedef struct { int a; double b; } S;
// alignof(S) == 8
In this case, the alignof
value is the alignment requirement of the largest element in the structure.
Similarly, for
typedef __declspec(align(32)) struct { int a; } S;
alignof(S)
is equal to 32
.
One use for alignof
would be as a parameter to one of your own memory-allocation routines. For example, given the following defined structure S
, you could call a memory-allocation routine named aligned_malloc
to allocate memory on a particular alignment boundary.
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));
For more information on modifying alignment, see:
For more information on differences in alignment in code for x86 and x64, see:
alignof
and __alignof
are synonyms in the Microsoft compiler. Before it became part of the standard in C++11, the Microsoft-specific __alignof
operator provided this functionality. For maximum portability, you should use the alignof
operator instead of the Microsoft-specific __alignof
operator.
For compatibility with previous versions, _alignof
is a synonym for __alignof
unless compiler option /Za
(Disable language extensions) is specified.