派生クラスのビットフィールドに問題があります。
g++ コンパイラを使用すると、クラスに割り当てることができ、__attribute__((packed))
ビットフィールドがパックされます。そう
class A
{
public:
int one:10;
int two:10;
int three:10;
} __attribute__ ((__packed__));
4 バイトのみを使用します。ここまでは順調ですね。
ただし、クラスを継承すると、このように
class B
{
public:
int one:10;
int two:10;
} __attribute__ ((__packed__));
class C : public B
{
public:
int three:10;
} __attribute__ ((__packed__));
上記のクラス A と同じコンテンツを持つクラス C も同じレイアウト、つまり 4 バイトを占めると予想します。ただし、C は 5 バイトを占有することが判明しました。
だから私の質問は、私は何か間違ったことをしているのですか?それともコンパイラの問題ですか?見落とし、本当のバグ?
私はグーグルを試しましたが、興味のないLinuxとWindows(コンパイラがMSVCをエミュレートしようとする場所)の違いを除けば、実際には何も思いつきませんでした。これはLinux上だけです。