内存对齐那点事-创新互联

基础 何为内存对齐

现代计算机中内存空间都是按照字节(byte)进行划分的,所以从理论上讲对于任何类型的变量访问都可以从任意地址开始,但是在实际情况中,在访问特定类型变量的时候经常在特定的内存地址访问,所以这就需要把各种类型数据按照一定的规则在空间上排列,而不是按照顺序一个接一个的排放,这种就称为内存对齐,内存对齐是指首地址对齐,而不是说每个变量大小对齐。

创新互联长期为上1000+客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为卫东企业提供专业的网站设计、做网站卫东网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。为什么要内存对齐

我们知道内存的最小单元是一个字节,但是当cpu从内存中读取数据的时候,cpu并不是以字节为单位访问数据,而是将内存当成多个块,每次从内存中读取一个块,这个块的大小可能是2、4、8、16字节等。

如果没有对齐,为了访问一个变量可能产生二次访问。

所以内存对齐是操作系统为了提高访问内存的效率。操作系统在访问内存的时候,每次读取一定长度(这个长度是操作系统默认的对齐数,或者默认对齐数的整数倍)。使用空间换时间,提高了效率。

如何内存对齐
  • 对于标准数据类型,它的存放地址只要是它的长度的整数倍。
  • 对于非标准数据类型,比如结构体,要遵循一下对齐原则:
    1、第一个数据成员要放在offset为0的位置。
    
    2、从第二个数据成员开始 要放在 min(当前成员大小,对齐模数)的整数倍的地方开始位置。
    比如int在32位机器为4字节,#pargama pack(2),即对齐模数为2。那么从2的倍数地方开始存储
    
    3、二次偏移:所有属性计算完后,结构体的总大小为:min(结构体内部大成员大小, 对齐模数)的整数倍,不足补齐。
    
    4、结构体做为成员的对齐规则。假设A结构体为B结构体的成员,那么结构体A的起点位置为 min(A结构体中大成员, 对齐模数)。
    
    注意:
    1、对齐模数可以通过#pargama pack(show)查看(默认对齐模数=8字节),也可以通过#pargama pack(n),修改为n

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


名称栏目:内存对齐那点事-创新互联
URL链接:http://myzitong.com/article/cedccp.html