字节序与边界对齐

字节序:
        32位处理器每次处理 4 个字节。
        当数据类型大于1个字节时,其在内存中的顺序存在两种模式:
            (1)小端:低字节放在低地址
            (2)大端:低字节放在高地址
边界对齐:
        边界对齐是处理器为了提高处理性能而对存取数据的起始地址所提出的一种要求。
        typedef struct{
                char a_;
                int     b_;
          }
        在采用边界对齐处理的情形下,当处理器需要访问 a_ 和  b_ 变量时只需进行一次存取。
        而在不采用边界对齐时,a_ 变量无论如何只要进行一次存取,b_ 变量却需要两次。

        C语言除了对结构体或联合体内的变量进行对齐处理外(从结构内部的角度),还需要将整个数据结构分配在以4字节为边界的地方才有意义。

        在默认的情况下,编译器将采用边界对齐的处理方式来提高程序的执行效率。但是,我们有时并不希望存在这种字节对齐处理方式,比如说,在两台主机进行网络通信时,我们并不希望因为字节对齐而传送多余的字节。为了避免编译器进行字节对齐处理,可以在结构之前加上“#pragma pack(1)”预处理指令,它告诉编译器对指定的数据结构采用单字节对齐方式进行处理。

   
   
  1. #pragma pack(1)
  2. typedef struct {
  3. char a_;
  4. int b_;
  5. }type_t;
  6. int main()
  7. {
  8. type_t tp;
  9. tp.b_ = 1;
  10. return 0;
  11. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值