2016 - 2025

感恩一路有你

win10分配字节内存失败 C中malloc分配内存中有没有字节对齐一说?

浏览量:2964 时间:2021-03-12 01:50:23 作者:admin

C中malloc分配内存中有没有字节对齐一说?

C本身并不对齐malloc,但编译器通常会对其进行优化,即malloc获得的数据是4字节或8字节对齐的。这是在操作系统分配内存时完成的。

怎么做8字节内存对齐?

VC和GCC默认都是4字节对齐方式,#pragma pack(n)可用于在编程中指定对齐模数。造成上述差异的原因是VC和GCC对double类型的对齐方式不同。Win32平台上的microsoftvc编译器默认采用以下对齐规则:任何基本数据类型T的对齐模数为T的大小,即sizeof(T)。例如,对于double类型(8字节),这种类型的数据的地址总是8的倍数,而char类型的数据(1字节)可以从任何地址开始。Linux下的GCC遵循另一套规则:2字节大小(包括单字节)的任何数据类型的对齐模数是2,而所有其他超过2字节大小的数据类型(如long、double)都是4。复杂类型(如结构)的默认对齐方式是其最长成员的对齐方式,当成员是复杂类型时,该对齐方式会使长度最小化。Struct{char a;double B;}在VC中,由于结构中有double和char,根据最长的数据类型对齐方式,char只占用1b,但后面的double占用的空间超过8b,char独占8b;而double占用8b,共16byte。在GCC中,double的长度超过4个字节,并按4个字节对齐。原理同上,但char取4字节,double取2个4字节,共12字节。

字节对齐会影响内存访问的效率吗?

主要原因是CPU执行内存访问指令时,如果地址对齐,可以缩短内存访问的时钟周期,从而提高内存访问速度。详细资料可参见《微机原理》等书籍,会有相关介绍

win10分配字节内存失败 结构体4字节对齐8字节对齐 内存对齐三原则

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。