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;
}

/* 《程式語言教學誌》的範例程式
   https://kaiching.org/
   檔名:u0408.cpp
   功能:示範 C++ 的 alignof 運算
   作者:張凱慶*/

編譯後執行,結果如下

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

上一頁 4.7 - typeid 運算
回 C++ 速查手冊首頁
下一頁 4.9 - 指派運算