计算机字节对齐探索

1270阅读 0评论2007-08-08 lykent
分类:C/C++

     

1. 概念:
    现代计算机访问特定类型变量时在特定的内存地址访问,这就要求各种类型的变量按照一定的规则在地址空间上排列,这就是字节对齐。
2. 作用和原因:
    各种硬件平台的处理方式的不同,效率的影响。
3. 四个重要基本概念:
   3.1. 数据类型的自身对齐值(32位机)
        sizeof(char)=1, sizeof(short)=2,sizeof(int,long,float)=4,sizeof(double)=8 Byte.
   3.2. 结构体或类的自身对齐值:
  其成员中自身对齐值最大的那个值
   3.3. 指定对齐值:
#pragma pack(value)时的指定的value值
   3.4. 数据成员、结构体和类的有效对齐值,记为N
自身对齐值和指定对齐值中最小的那个。
4. 对齐原理
   有效对齐值N是最终来决定数据存放地址的值,就是数据存放开始地址满足条件start_address % N = 0。
5. 应用
    设置机器缺省对齐方式的方法:#pragma pack(value) 取消其对齐方式:#pragma pack()
6. Example:(按照4byte对齐, As: #pragma pack(4))
typedef union uinA
{
         char a;
         int b[7];
         double c;
}A;


typedef struct tagB
{
         int a;
         char b;
         A c;
         double d;
}B;

Result: sizeof(A) == 28 sizeof(B) == 44

上一篇:没有了
下一篇:PON,EPON,GPON的简单概念