面试题答案
一键面试内存对齐方式分析
struct Inner
:int
类型通常占4个字节,char
类型占1个字节。- 由于
struct Inner
中最大成员为int
,其对齐模数为4(一般int
对齐模数为4)。 - 所以
struct Inner
整体大小为4 + 3(补齐)= 8 字节(char
后面补齐3个字节以满足4字节对齐)。
struct Outer
:struct Inner
类型成员in
占8个字节,double
类型占8个字节。struct Outer
中最大成员为double
,其对齐模数为8。- 所以
struct Outer
整体大小为8 + 8 = 16字节(struct Inner
已经是8字节对齐,不需要额外补齐,double
直接紧跟其后)。
内存对齐对性能的影响
- 提高内存访问效率:现代计算机的内存访问通常以块为单位,例如4字节或8字节块。如果数据按照对齐规则存储,CPU可以一次读取一个完整的对齐块,减少内存访问次数。例如,对于
struct Outer
中的double
类型成员,如果未对齐,CPU可能需要读取两个内存块并进行拼接,而对齐后可以一次读取完成,提高了数据读取速度,从而提升性能。 - 降低缓存命中率:如果结构体数据未对齐,可能会跨越缓存行边界,导致缓存命中率降低。因为缓存通常按一定大小的缓存行来管理数据,对齐的数据更有可能被完整地存储在一个缓存行中,再次访问时可以直接从缓存中获取,提高缓存命中率,进而提升性能。
总之,内存对齐在一定程度上可以提高内存访问效率和缓存命中率,对程序性能有积极影响。在编写代码时,合理利用内存对齐可以优化程序性能。