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