C++介绍alignof操作符返回指定类型的字节对齐值。为了获得最大可移植性,你应该使用alignof操作符代替微软特定的__alignof 操作符。
微软专用
返回类型的长度值(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 |
返回值和基本类型的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));
其中sizeof(S)等于16,需要分配的内存大小为n*16;__alignof(S)等于32,为之前分配内存的对齐边界大小。