网站自定义代码,在哪个网站申请建设资质,视频网站做电商,房地产东莞网站建设关于字节对齐前言意义自定义字节对齐存储空间内存读取效率平台适应性结论前言
计算机中的内存空间大小是以字节#xff08;byte#xff09;为基本单位划分的#xff0c;从理论上讲似乎对任何类型的变量的访问可以从任何地址开始#xff0c;而计算机并非逐字节大小读写内存…
关于字节对齐前言意义自定义字节对齐存储空间内存读取效率平台适应性结论前言
计算机中的内存空间大小是以字节byte为基本单位划分的从理论上讲似乎对任何类型的变量的访问可以从任何地址开始而计算机并非逐字节大小读写内存而是以2,4,或8的倍数的字节块来读写内存则特定类型变量的时候经常需要在特定的内存地址访问这就需要各种类型数据按照一定的规则在空间上排列这就是对齐。
意义
实际上编程中字节对齐的工作一般由编译器来自动实现了我们可以不用刻意进行字节的对齐但是如果对于系统性能有较高的要求时字节对齐也是一个需要考虑的优化方向。下面基于结构体的字节对齐以存储空间、内存读取效率、平台适应性三个方面进行介绍。
自定义字节对齐
#pragma pack (n) //编译器将按照n个字节对齐。
....
#pragma pack //取消自定义字节对齐方式。存储空间
如下代码
typedef struct
{char a;short b;int c;int d;}inputInfo;typedef struct
{char a;int b;short c;int d;
}inputInfo1;以上两个结构体占用空间分别为12与16可以看到虽然都是相同数据变量不同的排列顺序会有不同的影响这是编译器自动进行的字节填充造成的因此合理安排变量位置可以节省不少的内存占用空间。
内存读取效率 由上图可知在没有字节对齐的情况下变量b是通过两次才被真正读取到读取数据总共用了3次而字节对齐后只用了2次因此可以提高内存的读取效率只不过是在牺牲内存空间的条件下。
平台适应性
由于不同平台在对存储空间的处理上有很大的不同因此同样的结构在不同平台的对齐方式有所不同若没有字节对齐轻则只是影响内存的执行效率重则会造成程序出现错误。因此我们一般可以选择两种处理方法
一字节对齐内存占用最小但执行效率最低根据平台要求自己定义字节填充自己均衡内存空间占用与执行效率
结论
一般要求结构体成员合理安排位置其基本的原则就是把结构中的变量按照类型大小从小到大声明以节省空间跨平台数据结构可考虑1字节对齐节省空间但影响访问效率人为地进行字节填充可以提高访问效率但牺牲一定的内存空间当需要最大程度的内存访问效率时可以选择最大内存数据类型的倍数进行字节对齐