Chinaunix首页 | 论坛 | 博客
  • 博客访问: 25125
  • 博文数量: 14
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-25 11:52
文章分类

全部博文(14)

文章存档

2011年(1)

2010年(3)

2009年(10)

我的朋友
最近访客

分类:

2009-06-03 14:13:09

 
 

类型 对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)
??Char    偏移量必须为sizeof(char)即1的倍数-->BYTE
??Short   偏移量必须为sizeof(short)即2的倍数-->WORD
??int ??偏移量必须为sizeof(int)即4的倍数-->DWORD
??float ?偏移量必须为sizeof(float)即4的倍数 (同long)

??double  偏移量必须为sizeof(double)即8的倍数

 

#pragma   其实就是控制编译的参数

 

由于编译器存在数据对齐的问题,如果在定义数据类型的时候不用这两个东东,编译器就会按照默认的方式进行对齐,比如一个BYTE型的变量,长度就可能不再是一个字节,会出现一些预想不到的结果

 

举个简单的例子:  
  struct   st  
  {  
          int   m_iMember1;  
          char   m_cMember2;  
          long   m_lMember3;  
  }  
   
  在使用#pragma   pack(1)   时sizeof(st)=9(32位机器)  
  vc默认:sizeof(st)=16   因为VC默认以8字节对齐,其他编译器可能不一样。  
  如果使用#pragma   pach(4):   sizeof(st)=12;

 

vc默认:sizeof(st)=16   因为VC默认以8字节对齐,其他编译器可能不一样。"  
   
  是不对的.在32位机器上的结果是12.因为32位CPU不能支持8字节以上的对齐方式.它都以4字节方式对齐的.

 

阅读(407) | 评论(0) | 转发(0) |
0

上一篇:c语言常用格式

下一篇:typedef enum{

给主人留下些什么吧!~~