c 结构体转byte_关于C/C++ 结构体字节的算法

简简单单的答案,看例子。

本人机器64位,指针8字节;32位,指针4字节。

文件:sizeof.c#include 

typedef struct SS{

char    name[131];

short   type;

int     size;

int     offset;

unsigned short     precision;

void    *data;

#if 0

}__attribute__ ((__packed__))AA;

#else

}ColAttr_t;

#endif

int main(int argc, char **argv)

{

printf("%d \n", sizeof(AA));

return 0;

}

看似 151字节(#if 1 即可看出,attribute 紧凑字节网络用),实际160字节。

答案:是按照8字节对齐的,因为void * 是8字节,去掉void * 最大是4字节,即按照4字节对齐。

fc1dd419ec15c95c7f5a4363afc1010a.png

分析:都是向 8字 节对齐。

第一行,char cname[128]字节。

第二行, 剩下3个字节和 short type ,组合占8字节。(一共占5字节,余3 放不下int类型)。

第三行,int size和 int offset 组合占8字节。

第四行,void * 由于64位占8字节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值