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

基础 何为内存对齐

现代计算机中内存空间都是按照字节(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元起,快前往官网查看详情吧

文章标题:内存对齐那点事-创新互联
地址分享:https://www.cdcxhl.com/article28/cedccp.html

成都网站建设公司_创新互联,为您提供网站策划网站改版网站设计公司品牌网站制作标签优化手机网站建设

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都seo排名网站优化