1.6
结构体内存对齐
首先得掌握结构体的对齐规则:
1.
第一个成员在与结构体变量偏移量为
0
的地址处。
2.
其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处
对齐数
=
编译器默认的一个对齐数 与 该成员大小的
较小值
。
3.
结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。
4.
如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整
体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
为什么存在内存对齐
?
1.
平台原因
(
移植原因
)
:
不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特
定类型的数据,否则抛出硬件异常。
2.
性能原因
:
数据结构
(
尤其是栈
)
应该尽可能地在自然边界上对齐。
原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访
问。
总体来说:
结构体的内存对齐是拿
空间
来换取
时间
的做法