为什么sizeof为一个字符显示4个字节



所以我现在是一名学生,正在上编程课程。

今天我们讨论了sizeof在不同类中的使用(如果它有1 int或2 int,依此类推)

我觉得奇怪的一个例子是:

class TwoIntAndACharClass
{
public:
    int x_;
    int y_;
    char z_;
};

以及测试它的部分

TwoIntAndACharClass o3b;
cout << "Sizeof TwoIntAndACharClass          = " <<  sizeof(o3b) << "n";

所以在程序中,我可以看到一个有1个字符的类占用了1个字节。所以当我看到这个时,我想我会看到9个字节,而不是12

所以一开始我觉得这很奇怪,但过了一段时间我得出结论,它可能会节省一些4字节的块。

为了100%确定这是真的,我尝试在类中添加一个新变量(8字节的双变量),总大小从12字节增加到现在的24字节。这个字符现在必须是8字节长,所以我的最后一个理论失败了。

我的最后一个理论是,它将使用已经声明的最大变量,并将其大小用于char变量_z,因为这适用于长整型(8字节)和双整型(也是8字节)

所以我的问题是,我的最后一个理论是真的吗?或者是不同的东西让字符占用了比所需更多的内存?

抱歉我英语不好。

sizeof提供结构的大小,而不是其成员大小的总和。由于对齐要求(int通常喜欢在自然边界上对齐;在大多数平台上是4字节),编译器会将结构填充到12字节,这样,当结构的多个实例彼此相邻时(例如,在数组中),它们会保持正确对齐。

大多数编译器都有一些自定义扩展来控制填充,例如Microsoft编译器中的#pragma pack

最新更新