分享
Go内存优化(一)— struct
sipt · · 2464 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
原理
关于Golang同一struct中field的书写顺序不同内存分配大小也会不同。主要原因如下:struct内field内存分配是以4B为基础,超过4B时必须独占。
示例
type A1 struct {
a bool
b uint32
c bool
d uint32
e uint8
f uint32
g uint8
}
计算一下A1所需要占用的内存:
- 首先第1个4B中放入a,a是bool型,占用1B,剩余3B
- 这时看b是uint32,占用4B,剩余3B放不下,所以offset到下一个4B空间,这时我们会发现3B没有放东西,被浪费了
- 依次往下,A1要占用28B的空间
根据1,2两个步骤很容易看出,有很多浪费空间。
优化:
type A2 struct {
a bool
c bool
e uint8
g uint8
b uint32
d uint32
f uint32
}
- 首先第1个4B中放入a,a是bool型,占用1B,剩余3B
- c是bool,占用1B,放入后剩余2B
- d是uint8,占用1B,放入后剩余1B
- 依次往下
这样会使内存使用率高很多。
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2464 次点击 ∙ 1 赞
上一篇:你应该知道Go语言的几个优势
下一篇:golang slice
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
原理
关于Golang同一struct中field的书写顺序不同内存分配大小也会不同。主要原因如下:struct内field内存分配是以4B为基础,超过4B时必须独占。
示例
type A1 struct {
a bool
b uint32
c bool
d uint32
e uint8
f uint32
g uint8
}
计算一下A1所需要占用的内存:
- 首先第1个4B中放入a,a是bool型,占用1B,剩余3B
- 这时看b是uint32,占用4B,剩余3B放不下,所以offset到下一个4B空间,这时我们会发现3B没有放东西,被浪费了
- 依次往下,A1要占用28B的空间
根据1,2两个步骤很容易看出,有很多浪费空间。
优化:
type A2 struct {
a bool
c bool
e uint8
g uint8
b uint32
d uint32
f uint32
}
- 首先第1个4B中放入a,a是bool型,占用1B,剩余3B
- c是bool,占用1B,放入后剩余2B
- d是uint8,占用1B,放入后剩余1B
- 依次往下
这样会使内存使用率高很多。