C++开发之—内存对齐

网络数据协议的定义:

WORD为两个字节,BYTE是一个字节,但是sizeof(tagInfo)大小却是4

在头文件的开头和结尾处分别设置,然后sizeof(tagInfo)的大小就为3了。

下面摘自网络:

内存对齐的原则以及作用?

  • 结构体内的成员按自身长度自对齐(32位机器上,如char=1,short=2,int=4,double=8),所谓自对齐是指该成员的起始地址必须是它自身长度的整数倍。如int只能以0,4,8这类地址开始。
  • 结构体的总大小为结构体的有效对齐值的整数倍(默认以结构体中最长的成员长度为有效值的整数倍,当用#pragrma pack(n)指定时,以n和结构体中最长的成员的长度中较小者为其值)。即sizeof的值,必须是其内部最大成员的整数倍,不足的要补齐。

例如:

sizeof(A)=12,sizeof(B)=8;

因为左边是1+(3)+4+1+(3)=12,而右边是1+1+(2)+4=8。括号中为补齐的字节。

内存对齐的作用:
1、平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。
2、性能原因:经过内存对齐后,CPU的内存访问速度大大提升。

QQ群:239759131 cocos 技术交流 欢迎您