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 latest version of this topic can be found at __alignof Operator.
C++11 introduces the alignof
operator that returns the alignment, in bytes, of the specified type. For maximum portability, you should use the alignof operator instead of the Microsoft-specific __alignof operator.
Microsoft Specific
Returns a value of type size_t that is the alignment requirement of the type.
Syntax
__alignof(
type
)
Remarks
For example:
Expression | Value |
---|---|
__alignof( char ) | 1 |
__alignof( short ) | 2 |
__alignof( int ) | 4 |
__alignof( __int64 ) | 8 |
__alignof( float ) | 4 |
__alignof( double ) | 8 |
__alignof( char* ) | 4 |
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: