为什么结构的sizeof不等于C / C ++中每个成员的sizeof之和?
结构的sizeof和该结构的每个成员的sizeof之和之间的差异是由于字节填充和对齐。C/C++中的每种数据类型都有对齐要求。处理器将具有其架构的处理字长。在32位计算机上,处理字的大小为4字节或32位。例如,如果您具有结构-
示例
#include <iostream>
using namespace std;
struct X
{
char b[3];
int c;
};
int main(){
char b[3];
int c;
int total = sizeof(b) + sizeof(c);
cout << sizeof(X) << endl;
cout << total;
}输出结果
这给出了输出-
8 7
在我的64位计算机上。为什么是这样?这是因为在结构中,它接受char数组并将其放入内存中,但是现在,如果将其大小为4个字节的int放在其旁边,则对齐规则将受到影响。因此,将跳过b末尾的额外字节,而c从4字节边界开始。这会导致额外的大小。
您可以在https://en.wikipedia.org/wiki/Data_structure_alignment上了解有关这些规则的更多信息。
热门推荐
5 短祝福语简短暖心
10 结婚祝福语粤语大全简短
11 晚上祝福语女生文案简短
12 法语妈妈生日祝福语简短
13 药厂开工祝福语大全简短
14 蛋糕节日祝福语简短英文
15 跨年的生日祝福语简短
16 文案祝福语英文短句简短
17 在家聚餐婚礼祝福语简短
18 学生节祝福语大全简短