This question already has answers here:
Why isn't sizeof for a struct equal to the sum of sizeof of each member?
(12个答案)
4年前关闭。
有人可以帮助我了解
这段代码将我的大小打印为16个字节。类的大小是根据其成员计算的。所以我有4个字节(
那为什么我得到16个字节呢?
当我注释掉
(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个字节呢?
当我注释掉
int
和double
成员时,我得到1个字节。 最佳答案
该类中字段的布局是实现定义的,只要POD类与C结构兼容即可。但是,即使在C结构中,实现也会由于各种原因(例如性能)而添加填充。因此,您的编译器可能会在int
字段之后添加四个填充字节,以使double
字段以8字节对齐的地址开始。
如果您特别希望不要发生这种情况,则可以使用一些方法来控制类/结构的对齐和填充,这在编译器之间会有所不同。例如,GCC具有类似于__attribute__((packed))
的语法,它将删除该填充。很少需要这样做-通常是在结构需要映射到设备寄存器时-通常会影响性能,因此请尽可能避免使用。
关于c++ - 为什么我的类(class)人数大于类(class)人数之和? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37242785/
10-11 19:34