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 ...
沒有留言:
張貼留言