字节对齐预编译指令的复杂用法及应用场合

  我看到这样的:   #pragma   pack(<[push   &brvbar;   pop],[identifier]>,[n])    
  预编译指令,看了msdn后还是不甚明白,

应用场合

,#pragma   pack()功能是局部调整结构成员内存位置对齐用的.  
  因为操作系统为了加快内存访问速度,缺省时总是将结构成员分配在整数对齐边界的内存位置.  
   
  #pragma   pack()可以改变这一缺省行为.   除了一些Hook程序外,如果在网上应用程序之间传递结构(struct)化数据,也必须改变缺省对齐属性  

pragma   pack(...)  
        ...  
  #pragma   pack()   对   与  
  #pragma   pack(...)  
  ...  
  #pragma   pop()对有什么不同之处?brvbar和identifier有什么具体的意义?  
  敬请不吝赐教。  
 
  #pragma   pack(1)//   这里以后定义的structrue将以1字节对齐    
  ...   ...                                      
  #pragma   pack()   //   这里以后定义的structrue将以默认的字节对齐(一般为8字节)  
   
  以上操作没有涉及编译栈  
   
  ******************************************************  
   
  #pragma   pack(1)//   这里以后定义的structrue将以1字节对齐    
  #pragma   pack(push,2)//   将当前structrue对齐值(1字节)保存到编译栈,并且这里以后定义的structrue将以2字节对齐    
  ...   ...                                      
  #pragma   pack(pop)   //   弹出编译栈顶的对齐值(1字节),并作为以后定义的structrue的字节对齐值  
   
  ******************************************************  
   
  #pragma   pack(1)//   这里以后定义的structrue将以1字节对齐    
  #pragma   pack(push,2)//   将当前structrue对齐值(1字节)保存到编译栈,并且这里以后定义的structrue将以2字节对齐    
  ...   ...                                      
  #pragma   pack(pop)   //   弹出编译栈顶的对齐值(1字节),并作为以后定义的structrue的字节对齐值  
   
  identifier仅仅是对某个对齐值起一个别名,为了方便快速弹栈.  

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值