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