在面试中,阿里面试还有天融信面试中会问到内存对齐,我贴出了关于我的回答
1.问到:你说说你理解的内存对齐?
可以针对于两个方面来说,什么是内存对齐?为什么要内存对齐?来解释
1.什么是内存对齐?
内存对齐是编译器将程序中的每个“数据单元”安排在合适的位置上。
2.为什么要内存对齐?
我们知道内存是以字节为单位存储的,但是处理器存取内存是以块为单位,块的大小是2,4,8,16字节大小,这是内存的存取粒度
从内存存取效率方面,内存对齐可以提升CPU的存取内存效率,假如有一个int整型变量,有一块内存单元:地址0~7,那么这个整型变量在未内存对齐情况存放在1,2,3,4,处理器假设4字节读,需要两次访问(首先先读0~3,在读4~7),如果我们内存对齐,这个整型变量会存放在0开始的地址,只需要读一次,内存效率提升(因为CPU运行速度比访问内存的速度要快很多个数量级)。
2.内存对齐有什么作用?
提升性能,减少CPU访问内存次数
3.内存对齐原则是什么?
1.结构体总体大小可被最宽成员大小整除
2.结构体起始地址可被最宽成员大小整除
3.自身起始地址偏移能被自身整除
4.如何更改内存对齐方式?
可以使用预处理命令#pargma
#pargma (1)
//这种方式是不进行内存对齐,一般使用在网络传输中
#pargma
#pargma (2)//也可以是2,4,8,16
#pargma