结构体和类的字节对齐

   编译器为了优化运行效率,对于结构体和类的成员访问会进行字节填充,即字节对齐。在这之前,我们需要知道如下基本信息:

    1 C++中,类和结构体并没有本质的区别。只是默认的访问权限不同。
    2 类和结构体的大小都是数据成员的大小,而不包括累成员函数的大小。
    3 空的类或者空的结构体的大小都为1,而不是0。目前是编译器能够对其进行寻址定位。

     字节对齐通常是已结构体中占用空间最大的一个成员进行对齐的。
     typedef struct
    {
         char c; //占4个字节
         int i; //4个字节
     }TEST,*PTEST;
     32位机上,该结构体的大小为8。

    typedef struct
   {
           char c;  //4
           int i;   //4 
           long long k; //8
     }TEST,*PTEST;
     32位机上,该结构体的大小为16字节。

    typedef struct
    {
           char c;  //8
           long long k; //8 
           int i; //8
      }TEST,*PTEST;
     32位机上,该结构体的大小为24字节。

     typedef struct
    {
           char c;  //占用4个字节,以int对齐
           int m; //占用4个字节,加上c的4个字节和k的8个字节对齐
           long long k; //8 
           int i; //8 已k的8个字节对齐
      }TEST,*PTEST;
     32位机上,该结构体的大小为24字节。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值