C++ 速查手冊 V1.00 - 單元 4.8 - alignof 運算




alignof 為 C++11 新增的關鍵字,當作運算子使用,回傳物件對齊所需的位元組數。用法如下


alignof (type-id);


type-id 可以是型態名稱或變數名稱。


在 64 位元 (bit) 的機器上,處理器抓一次資料就是 64 位元,而 64 位元等於 8 個位元組 (byte) ,各種型態卻不會剛好都是 8 個位元組,因此就有放置資料的對齊 (alignment) 問題。

舉例如下


001 #include <iostream>
002
003 struct Demo1 {};
004
005 struct Demo2 {
006    int f2;
007    float f1;
008    char c;
009 };
010
011 int main() {
012    std::cout << "Demo1: "
013              << alignof(Demo1)
014              << std::endl;
015    std::cout << "pointer: "
016              << alignof(int*)
017              << std::endl;
018    std::cout << "char: "
019              << alignof(char)
020              << std::endl;
021    std::cout << "Demo2: "
022              << alignof(Demo2)
023              << std::endl;
024
025    return 0;
026 }
027  
028 /* Kaiching Chang
029    u0408.cpp
030    2014-02 */

編譯後執行,結果如下


$ g++ -std=c++0x u0408.cpp
$ ./a.out
Empty: 1
pointer: 8
char: 1
Foo: 4
$

continue ...

沒有留言: