分享
  1. 首页
  2. 文章

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. 首先第1个4B中放入a,a是bool型,占用1B,剩余3B
  2. 这时看b是uint32,占用4B,剩余3B放不下,所以offset到下一个4B空间,这时我们会发现3B没有放东西,被浪费了
  3. 依次往下,A1要占用28B的空间
    根据1,2两个步骤很容易看出,有很多浪费空间。

优化:

type A2 struct {
 a bool
 c bool
 e uint8
 g uint8
 b uint32
 d uint32
 f uint32
}
  1. 首先第1个4B中放入a,a是bool型,占用1B,剩余3B
  2. c是bool,占用1B,放入后剩余2B
  3. d是uint8,占用1B,放入后剩余1B
  4. 依次往下
    这样会使内存使用率高很多。

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:sipt

查看原文:Go内存优化(一)— struct

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2464 次点击 ∙ 1 赞
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏