Table of Contents
了解数据如何存储在内存中对于C和C++中的有效编程至关重要. 结构和结合是影响内存布局和大小的基本数据类型,本文解释了内存如何被分配到这些数据类型,如何准确计算它们的大小.
结构的内存布局
C和C++中的结构是变量的集合,可能类型不同,在一个单一名称下组合. 编译器通过按顺序排列每个成员来分配一个结构的内存,并可能进行补丁以满足对齐要求.
结构的总大小是其成员大小的总和,加上任何为对齐而添加的垫条. pading确保每个成员从一个根据其大小或对齐要求而可分辨的地址开始.
联盟的内存布局
联盟与结构相似,但在内存分配上却有所不同. 联盟所有成员共享相同的内存空间,这与其最大成员的大小相同,这样可以让多个数据类型占据相同的内存位置.
工会的规模由工会的最大成员决定,再加上可能的调整补丁。 写给一个成员会影响其他成员的数据,因此工会被用于内存高效的数据共享。
计算数据大小
计算结构和联盟的大小需要总结单个成员的大小并考虑校正。 C 和 C++ 中的 [[FLT: 0] 运算符大小 提供了总大小的字节。
例如,考虑一个结构,其中和一个]。结构的大小取决于的大小、的大小以及添加的用于对齐的垫板。同样,一个工会的大小是其最大成员的大小。
- 使用 大小 来确定总大小。
- 考虑对每个成员进行调整的要求。
- 编译器添加的编目账户 。
- 记住工会在所有成员中都有着共同的记忆。