- 1
- 0
- 约1.83千字
- 约 4页
- 2021-09-02 发布于浙江
- 举报
如何设计结构体
之前写过一篇《如何设计一个C++的类》,今天这里继续聊聊如何设计结构体,注意本文不介绍在C++中结构体和类具体有什么区别,本文所说的结构体是指只有数据字段不带任何函数的那种结构体。
当创建结构体的实例时,结构体的数据成员会按其声明的顺序连续存储。然而,这个声明的顺序也是有学问的,顺序不同结构体的大小可能有很大差别,数据成员的访问性能也可能会有很大区别!
这里涉及一个概念:内存对齐。关于内存对齐我之前写过一篇文章:《内存对齐》,这里不深入讨论,只是简单介绍一下。
大多数编译器会对齐数据成员,会以四舍五入地址方式来优化数据的访问,如下表所示。这种内存对齐可能会在成员大小混合的结构体中产生未使用字节的空洞。例如:
struct?S?{????short?int?a;?//?2字节????//?6个空洞????double?b;?//?8????int?d;?//?4????//?4个空洞};S?ArrayOfStructures[100];
这里,在a和b之间有6个未使用的字节,因为b必须从一个能被8整除的地址开始。
最后还有4个未使用的字节空洞。这样做的原因是,数组中S的下一个实例必须从一个能被8整除的地址开始,以便将其b成员以8对齐。
然而,如果改变一下结构体中数据成员声明的顺序,通过将最小的成员放在最后,未使用的字节数可以减少到2:
struct
原创力文档

文档评论(0)