为什么结构的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上了解有关这些规则的更多信息。