彼此具有相同字段类型的结构和类的不同sizeof()

时间:2018-10-11 05:43:28

标签: c++

我已经知道,结构中的字段之间有填充,整个结构的大小取决于它们的顺序或类似的东西。 但这对类是否起作用?

我有一些类似的结构:

typedef struct {
    char *b;
    int s;
} class_t;

我也有一个具有相同字段的类:

class Class{
private:
    char *m_buf;
    int m_size;
};

问题是:为什么sizeof(class_t)给出16个字节,而sizeof(Class)给出12个字节?

2 个答案:

答案 0 :(得分:2)

除了structclass具有不同的默认访问规范和不同的默认继承(publicprivate)之外,class和一个结构完全相同。

答案 1 :(得分:2)

12位数字可疑。有点奇怪,告诉我编译器的布局有点时髦。

自从您提到GCC以来,我想可以通过__attribute__((packed))(很可能在宏中)或通过pack()编译指示以某种方式在该类上启用了结构打包。

您可以在这里看到这种行为:https://gcc.godbolt.org/z/XEkH7f