C++言語 ビットフィールド サイズについて
ビットフィールドとして構造体を作ったときのメモリ確保について 構造体の変数としてビットフィールドを使用したときにどのようにメモリが確保されるか。 サンプルプログラム1 #include <iostream> using namespace std; struct k_bool{ unsigned a : 8; unsigned b : 8; unsigned c : 8; unsigned d : 1; unsigned e : 1; unsigned f : 1; unsigned g : 1; unsigned h : 1; }; int main(void){ k_bool abcd; cout << "sizeof : " << sizeof(abcd); } これを実行すると次のようになる sizeof : 4 構造体内のコロンの後の数字がビット数である。 つまり、上のプログラムでは合計29ビットとなる。 8ビットで1バイトなので単純に計算すると3.625バイトと4バイトには満たない。 では、dで8ビット確保するとどうなるのか? #include <iostream> using namespace std; struct k_bool{ unsigned a : 8; unsigned b : 8; unsigned c : 8; unsigned d : 8; unsigned e : 1; unsigned f : 1; unsigned g : 1; unsigned h : 1; }; int main(void){ k_bool abcd; cout << "sizeof : " << sizeof(abcd); } これを実行すると次のようになる sizeof : 8 では、念のためにiを8ビットで追加して実行すると #include ...