C++ bool 所占的記憶體空間與資料對齊 (data alignment)
前言
這篇文章的內容,緣起於「程式人雜誌」討論區的這個討論串。這個討論串到最後已經失焦了,不過有幾個重點是值得提出來討論的,於是順手整理出幾個重點。
bool 所占的記憶體空間
C++ 內建的標準的型別中,有一個叫 bool
的型別,用來儲存邏輯運算的 true
(真)與 false
(假)。由於這種型別的變數就只會有 true
或 false
這兩種可能的值,因此,若是我們要儲存這樣的變數的話,理論上來說其實只要 1 個 bit 就夠用了。
然而在實作上,由於不是所有的 CPU 都能夠很有效率地處理單一 bit 的運算,因此通常編譯器會用其他更有效率方式的處理。
C++ 語言標準並沒有硬性規定 bool
要用多大的記憶體空間實作,把這件事留給編譯器自行決定。以 Visual C++ 來說,Visual C++ 4.2 是利用 typedef
將 bool
定義成 int
,因此 1 個 bool
變數會占用 4 個 byte 的空間;但在 Visual C++ 5.0 以後的版本,bool
則實作為占用 1 個 byte 的內建型別。在目前 x86 版的 GCC 中,bool
占用的空間也是 1 個 byte;但依據 CPU 架構的不同,可能會有不同的做法。