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,為之前分配內存的對齊邊界大小。
新聞熱點
疑難解答
圖片精選