struct占用内存分析
|
字数总计:
1857
|
阅读时长:
1分钟
|
阅读量:
308
这篇文章距离最后更新已过61 天,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
- 例子
- 首先有如下例子,该例子中定义了一个struct,有3个字段,它们的类型有byte,int32,int64,如果任意排列3个字段,会产生6种组合。
- 根据unsafe.Sizeof()可以获取struct占用内存,那么是否是1+4+8=13呢?
- 分析
- 内存对齐影响struct的大小
- struct的字段顺序影响struct的大小
- 内存对齐规则
- 3.1 对某一具体类型,
对齐值=min(编译器默认对齐值,类型大小Sizeof长度)
,在我的Mac上默认为8,所以最大值不会超过8。 - 3.2 在字段对齐后,struct本身也要进行对齐,
对齐值=min(默认对齐值,字段类型最大长度)
。 对齐值
也叫 对齐系数
、 对齐倍数
、 对齐模数
。- 每个
字段
在内存中的 偏移量
是 对齐值的倍数
。
- 以上述代码具体分析
byte
、 int32
、 int64
的 类型大小Sizeof长度
为1,4,8,编译器默认对齐值是8,所以byte
、 int32
、 int64
的对齐值是1,4,8。- 根据 3.1 对struct user1进行内存对齐,其内存结构如下:
- 根据 3.2对struct本身进行对齐,默认对齐值为8,字段最大类型长度为8,所以结构体的对齐值为8,目前内存长度为16,是8的倍数,已经实现了内存对齐。