所以我现在是一名学生,正在进行编程.
今天我们讨论了在不同类中使用sizeof(如果它有1个int或2个int等等)
我发现奇怪的例子的一部分是这样的:
class TwoIntAndACharClass
{
public:
int x_;
int y_;
char z_;
};
Run Code Online (Sandbox Code Playgroud)
以及测试它的部分
TwoIntAndACharClass o3b;
cout << "Sizeof TwoIntAndACharClass = " << sizeof(o3b) << "\n";
Run Code Online (Sandbox Code Playgroud)
所以在程序中我可以看到一个带有1个字符的类占用了1个字节.所以当我看到这个时,我以为我会看到9个字节而不是12个字节
所以首先我认为它很奇怪,但经过一段时间我得出的结论是它可能会保存一些4字节的块.
为了100%确定这是真的,我尝试在类中添加一个新变量(一个8字节的双变量),总大小从12个字节增加到现在的24个字节.那个char现在必须是8个字节,所以我的最后一个理论失败了.
我的最后一个理论是它将采用最大的已经声明的变量并使用char变量_z的大小,因为这适用于long long int(8字节)和double(也是8字节)
所以我的问题是,我的最后一个理论是真的 - 或者它是否有所不同使得char需要更多的内存然后需要?(我的老师确实说过,每个编译器都能以不同的方式处理这个问题,但是我已经在microsoft visual studio上尝试过了,而且朋友在另一个编译器上尝试了相同的结果,但这是真的,它是编译器处理它的方式吗?)
抱歉我的英语不好.
sizeof给出结构的大小,而不是其成员大小的总和.由于对齐要求(int通常喜欢在自然边界上对齐;大多数平台上为4个字节),编译器会将结构填充到12个字节,这样当结构的多个实例彼此相邻时(例如,数组),它们保持正确对齐.
大多数编译器都有一些自定义扩展来控制填充,例如#pragma pack在Microsoft的编译器中.
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |