Why does sizeof show 4 bytes for a char?
本问题已经有最佳答案,请猛点这里访问。
所以我现在是一名学生,正在学习编程课程。
今天我们讨论了sizeof在不同的类中的用法(如果它有1int或2int等等)
我觉得很奇怪的例子之一是:
1 2 3 4 5 6 7 | class TwoIntAndACharClass { public: int x_; int y_; char z_; }; |
以及测试它的部分
1 2 3 | TwoIntAndACharClass o3b; cout <<"Sizeof TwoIntAndACharClass =" << sizeof(o3b) <<" "; |
所以在程序中,我可以看到一个带有1个字符的类占用了1个字节。所以当我看到这个的时候,我想我会看到9字节而不是12字节
所以首先我觉得这很奇怪,但过了一段时间我得出结论,它可能会节省一些4字节的块。
为了100%确定这是真的,我尝试在类中添加一个新变量(8字节的双变量),总大小从12字节增加到现在的24字节。这个字符现在必须是8字节长,所以我的上一个理论失败了。
我的最后一个理论是,它将采用已经声明的最大变量,并将其大小用于char变量_z,因为这同时适用于long long int(8字节)和double(也适用于8字节)。
所以我的问题是,我的最后一个理论是真的吗?或者是其他的原因使得这个角色需要更多的记忆?(我的老师确实说过每个编译器都可以用不同的方式处理这个问题,但我在Microsoft Visual Studio上尝试过,一个朋友在另一个编译器上尝试过,结果相同,但这真的是这样吗,编译器处理这个问题的方式是这样的吗?)
抱歉我的英语不好。
大多数编译器都有一些自定义扩展来控制填充,例如微软编译器中的