c++ 结构体转为string_内存结构重新学c. 结构体成员偏移对齐

本文详细探讨了C++中结构体成员属性的偏移对齐机制,包括结构体整体大小对齐的计算方式,并介绍了如何通过`#pragma pack`指令控制结构体对齐大小,以理解内存布局和节省存储空间。
摘要由CSDN通过智能技术生成

结构体成员属性偏移对齐

我们看如下列子,并考虑结构体每个成员属性偏移

4df5ad04f52e223737f75ffb94408416.png

然后我们查看内存结构:b66457449dd0c8beaac54bffd34aade9.png我们惊讶的差异在 name之后空出了3个字节内存 cc,而在 genderheight内存结构中同样也多出了3个字节的 cc.一个多出了6个空白字节,那么加上固有的26字节那么这个结构体共占用 32字节。

造成这样的现象是由于c存在结构体对齐机制引起的,在编译参数由 Zp1,Zp2,Zp4,Zp8,Zp16控制。比如 Zp1为对齐大小为1, Zp8为8字节对齐。默认为 Zp8

上述的例子如果想输出26只需要修改编译参数为 Zp1即可。

结构体对齐作用(1):控制的是每个成员属性对于 结构体初始地址的偏移

假设结构体对齐大小为N,结构体成员为Y,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值