#Pragma Pack(n)与内存分配 pragma pack(push,1)与#pragma pack(1)的区别

在网络协议编程中,利用#pragma pack可以简化处理协议数据报文的方式。本文探讨了#pragma pack(push, 1)、#pragma pack(1)以及它们与编译器默认对齐的差异,强调了push和pop在恢复原始对齐状态上的作用,有助于节省内存并提高结构体控制的便利性。" 112158145,10293063,Vue 实践:停止页面滚动与经典布局实现,"['Vue', 'Vuex', 'Router', '页面布局']
摘要由CSDN通过智能技术生成

        在网络协议编程中,经常会处理不同协议的数据报文。一种方法是通过指针偏移的方法来得到各种信息,但这样做不仅编程复杂,而且一旦协议有变化,程序修改起来也比较麻烦。在了解了编译器对结构空间的分配原则之后,我们完全可以利用这一特性定义自己的协议结构,通过访问结构的成员来获取各种信息。这样做,不仅简化了编程,而且即使协议发生变化,我们也只需修改协议结构的定义即可,其它程序无需修改,省时省力。

#pragma  pack (1) //设定为1字节对齐           作用:调整结构体的边界对齐,让其以一个字节对齐;<使结构体按1字节方式对齐>
#pragma pack(push) //保存当前对齐状态
#pragma pack(4)    //设定为4字节对齐
#pragma  pack () //按结构数据内最大的字节对齐
#pragma  pack(push,1)//把原来对齐方式压栈,并设置新的对齐方式为1个字节对齐
#pragma  pack(pop)  //恢复默认对齐方式

        由上可见,加入push和pop可以使对齐恢复到原来状态,而不是编译器默认,可以说后者更优,但是很多时候两者差别不大。

例子:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大王算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值