为什么在 C/C++ 中,结构体的 sizeof 不等于其每个成员 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 位机器上。为什么会这样?这是因为在结构体中,它获取字符数组并将其放入内存,但如果它将大小为 4 字节的 int 放置在其旁边,则会违反对齐规则。因此,跳过 b 结尾处的额外字节,c 从 4 字节边界开始。这会导致额外的空间。
您可以在 https://en.wikipedia.org/wiki/Data_structure_alignment. 了解更多关于这些规则的信息。
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP