内存对齐是指将数据存储在内存中时,按照一定的规则让数据排列在规定的地址上,以提高数据访问的效率和速度。
在C++中,结构体内部的每一个成员变量都需要存储到内存中,因此需要进行内存对齐以保证内存的访问效率。
内存对齐规则如下:
- 每个成员变量按照其自身所占用的字节数对齐。
- 如果结构体的大小不是某个字节对齐周期的倍数,则自动填充字节使得结构体大小为对齐周期的倍数。
- 结构体的首地址要和对齐周期的倍数相同。(内存首地址为对齐周期的倍数)
对齐周期指的是数据类型的大小,例如int类型大小为4字节,则以4字节为对齐周期进行内存对齐。
填充字节取决于对齐周期,如果对齐周期小于结构体内最大数据类型的大小,则以对齐周期为准实现内存对齐;如果对齐周期大于结构体内最大数据类型的字节大小,则对齐周期失去作用,此时对齐周期为结构体内最大字节类型大小。
详细可阅读参考内容。
参考内容