This question already has answers here:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?

(12个答案)


4年前关闭。




有人可以帮助我了解sizeof()运算符的行为吗?
 #include <iostream>

using namespace std;

class A{
    int first;
    double last;
    public:
    A(int a)
    {
        cout << a << endl;
    }
};
int main()
{
    A a(3);
    cout << sizeof(a) << endl;
    return 0;
}

这段代码将我的大小打印为16个字节。类的大小是根据其成员计算的。所以我有4个字节(int)+ 8个字节(double)= 12。

那为什么我得到16个字节呢?

当我注释掉intdouble成员时,我得到1个字节。

最佳答案

该类中字段的布局是实现定义的,只要POD类与C结构兼容即可。但是,即使在C结构中,实现也会由于各种原因(例如性能)而添加填充。因此,您的编译器可能会在int字段之后添加四个填充字节,以使double字段以8字节对齐的地址开始。

如果您特别希望不要发生这种情况,则可以使用一些方法来控制类/结构的对齐和填充,这在编译器之间会有所不同。例如,GCC具有类似于__attribute__((packed))的语法,它将删除该填充。很少需要这样做-通常是在结构需要映射到设备寄存器时-通常会影响性能,因此请尽可能避免使用。

关于c++ - 为什么我的类(class)人数大于类(class)人数之和? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37242785/

10-11 19:34