我已经知道,结构中的字段之间有填充,整个结构的大小取决于它们的顺序或类似的东西。 但这对类是否起作用?
我有一些类似的结构:
typedef struct {
char *b;
int s;
} class_t;
我也有一个具有相同字段的类:
class Class{
private:
char *m_buf;
int m_size;
};
问题是:为什么sizeof(class_t)给出16个字节,而sizeof(Class)给出12个字节?
答案 0 :(得分:2)
除了struct
和class
具有不同的默认访问规范和不同的默认继承(public
与private
)之外,class
和一个结构完全相同。
答案 1 :(得分:2)
12位数字可疑。有点奇怪,告诉我编译器的布局有点时髦。
自从您提到GCC以来,我想可以通过__attribute__((packed))
(很可能在宏中)或通过pack()
编译指示以某种方式在该类上启用了结构打包。
您可以在这里看到这种行为:https://gcc.godbolt.org/z/XEkH7f