C++ 速查手冊
4.8 - alignof 運算
alignof 為 C++11 新增的關鍵字,當作運算子使用,回傳物件對齊所需的位元組數。用法如下
alignof (type-id);
type-id 可以是型態名稱或變數名稱。
在 64 位元 (bit) 的機器上,處理器抓一次資料就是 64 位元,而 64 位元等於 8 個位元組 (byte) ,各種型態卻不會剛好都是 8 個位元組,因此就有放置資料的對齊 (alignment) 問題。
舉例如下
#include <iostream>
struct Demo1 {};
struct Demo2 {
int f2;
float f1;
char c;
};
int main() {
std::cout << "Demo1: " << alignof(Demo1) << std::endl;
std::cout << "pointer: " << alignof(int*) << std::endl;
std::cout << "char: " << alignof(char) << std::endl;
std::cout << "Demo2: " << alignof(Demo2) << std::endl;
return 0;
}
/* 《程式語言教學誌》的範例程式
http://kaiching.org/
檔名:u0408.cpp
功能:示範 C++ 的 alignof 運算
作者:張凱慶*/
編譯後執行,結果如下
$ g++ -std=c++0x u0408.cpp |
$ ./a.out |
Demo1: 1 |
pointer: 8 |
char: 1 |
Demo2: 4 |
$ |