lei - lei001的BLOG http://lei001.52rd.net - 复制 - 收藏
lei001 发表于 2008-8-31 0:32:00

      字节对齐是C/C++编译器为了加速CPU寻址速度而采用的一种策略,通常的表现是将结构中某些不足CPU字长的成员填入若干字节的垃圾值使整个结构的大小成为CPU字长的整数倍。一个CPU的字长,通常简单地理解为一个sizeof(int)的大小。

     字节对齐的规律是:

     假设结构体的其实地址为0,    N字节对齐

   1)结构体成员变量地址是min(变量类型大小,N)的整数倍,否则补齐。

    2)结构体的长度为结构体中所有对齐参数的整数倍,否则补齐。

举例说明:

#include "stdio.h"

#pragma pack(4)
#pragma pack(push)
#pragma pack(4)
struct{
short a1; //2
short a2; //2
char a3;  //1
}A; //5+1

struct{
short a1; //2
char a2;  //1+1
short a3;  //2
}B; //6

struct{
long a1; //4
short a2; //2
}C; //6+2

struct{
short a1; //2+2
long a2;  //4
short a3; //2
}D; //10+2

struct{
char a1; //1
char a3;  //1
}E; //2

#pragma pack(pop)    


void main(void)
{
int num;
num = sizeof(A);
num = sizeof(B);
num = sizeof(C);
num = sizeof(D);
num = sizeof(E);
}

阅读全文(567) | 评论(0)
评 论
昵 称: 匿名
验证码: 7618
博 主
进入lei001的首页
博客名称:lei
日志总数:4
评论数量:0
访问次数:5728
建立时间:2006年3月22日
导 航
日 历
«Mar.2010»
123456
78910111213
14151617181920
21222324252627
28293031
公 告
暂无公告...
日 志
评 论
链 接