golang获取结构体中的tag_「C++学习笔记(一)」之结构体的内存对齐

一. 结构体的内存对齐:

结构体可以存储不同类型的数据,每种数据所占的字节数都不同。而结构体是按照最大字节数来存储的,若结构体中最大的数据类型占8个字节,则结构体存储的内存中按8个字节为一格存储,将其他较少字节数的数据往里填,若有空余,则看下一个数据能否填入;若不能,则按照内存对齐原则,从下一格重新开始填入数据,空余的内存则被跳过。

二. 设置结构体如下:
struct stus{    char *p;            //4    char arr[2];        //1*2    int c;              //4    short d;            //2    double f;           //8    long g;             //4    float h[2];         //4*2};

若不调整结构体中数据存储顺序,则按最大数据类型8个字节为一格,依次填入,如下图

2b6454a3969c36c5df004de1995ffafa.png

红色圈为空余的内存 计算得到结构体整体内存占40个字节

若将结构体中数据类型从大到小排列:

struct stus{    double f;           //8    float h[2];         //4*2    long g;             //4    int c;              //4    char *p;            //4    short d;            //2    char arr[2];        //1*2};

调整后结构体整体内存占32个字节

结论:

内存空余的情况得到了优化。但是打乱结构体的排列顺序也可能导致阅读结构体的思维混乱,所以需要平衡这两者。

b1bb7a1ab4fbddcdaaa92421df619488.png

关注公众号【计算机视觉与深度学习】,获取海量计算机视觉与深度学习资源,实战项目源码,最新论文下载,大厂面试经验!!!​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值