変数vのサイズは12バイトですが、サイズは6ビットなので、なぜ4バイトにならないのですか?次のプログラムの出力は12バイトになるのに対して、合計サイズは6ビットしかないのはなぜですか?
#include <iostream>
using namespace std;
struct abc {
int c : 4;
char x : 1;
int y : 1;
} v;
int main()
{
cout << sizeof v; // it prints 12 . why?
}
メモリ内のすべてが正しく整列されるように、構造体にはパディングされたメモリがあります。あなたのコンパイラが4バイト境界でストライドを設定しているようです。それぞれ4バイトを占めるintが2つあります(int32ですが、これは明示的に定義されていません。コンパイラはそれを解決しています)。最後にcharは1バイトを取り、9バイトになります。メモリは奇数では解決できません。各アドレスは偶数のスペースで開始する必要があります。したがって、3バイトで埋め込まれています。したがって、4 + 4 + 4 = 12 – Alex
です。http://en.cppreference.com/w/ cpp/language/bit_field –