继承考虑一个MWE:盒装结构的大小和不同的编译器
#include <iostream>
struct A {} __attribute__((packed)) ;
struct B : A { int x; } __attribute__((packed)) ;
struct C : A { B y; } __attribute__((packed)) ;
int main() {
std::cout << "Size of A: " << sizeof(A) << std::endl;
std::cout << "Size of B: " << sizeof(B) << std::endl;
std::cout << "Size of C: " << sizeof(C) << std::endl;
};
在Linux上我试图编译并运行:
$ g++ --version
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
$ g++ ./test.cpp && ./a.out
Size of A: 1
Size of B: 4
Size of C: 5
至于A和B一切都清楚了。但是C呢?什么增加了1个字节到C的大小?此外,如果您将删除任何继承关系,无论是B还是C,C都变成了大小4.使用MS编译器(至少有一个与VS 2013一起发布),我获得了1,4和4的大小。任何解释和细节在此表示赞赏。
可能的重复[在使用gcc时,为什么Linux和Windows上的打包结构的大小不同?](http://stackoverflow.com/questions/7789668/why-would-the-size-of-a -packed-structure-be-different-on-linux-and-windows-when) – MSD
@saranyadeviM,我已经看到了这个问题。在我看来,它讨论了为什么可以用不同的方式打包结构的原因(!)。我更感兴趣的是继承如何影响包装的结果,以及继承与组合混合如何将1字节添加到结构的大小。所以,我相信我的问题更具体。 :) – CaptainTrunky