关键字#pragma pack(1)...#pragma pack()有何作用?pragma是什么的简称?

来源:互联网 发布:镇江市美工招聘信息网 编辑:程序博客网 时间:2024/04/30 12:45

#pragma   pack(1)   是指定字节对齐方式为   1   byte   
    
 #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;Top

 

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