美文网首页
Go内存优化(一)— struct对齐

Go内存优化(一)— struct对齐

作者: sipt | 来源:发表于2018-06-29 14:48 被阅读50次

原理

关于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. 依次往下
    这样会使内存使用率高很多。

相关文章

  • Go内存优化(一)— struct对齐

    原理 关于Golang同一struct中field的书写顺序不同内存分配大小也会不同。主要原因如下:struct内...

  • 指针对其问题

    关于Go结构体内存大小的一点小知识 在go语言里我们经常使用struct作为数据存储,由于指针对齐问题,可能结构体...

  • iOS底层探索-calloc

    一、calloc底层探索 1.1、内存对齐原则 a:数据成员对齐规则:结构(struct)(或联合(union))...

  • iOS 内存对齐

    一、结构体内存对齐 1.1 结构体内存对齐三大原则 数据成员对⻬规则结构体(struct)或联合体(union)的...

  • 从结构体内存对齐到OC对象内存对齐

    1、结构体内存对齐 结构体对齐规则:1:数据成员对⻬规则:结构(struct)(或联合(union))的数据成员,...

  • (二) 内存对齐

    内存对齐规则 1: 数据成员对齐规则: 结构(struct) (或联合(union))的数据成员, 第一个数据成员...

  • 结构体内存对齐

    不同数据类型占用字节图 内存对齐的原则 1、数据成员对齐规则: 结构(struct)(或联合(union)的)数据...

  • 内存对齐

    内存对齐规则: 数据成员对齐规则结构(struct)(或联合(union))的数据成员,第一个数据成员放在offs...

  • iOS中关于内存对齐的探究

    结构体内存对齐的三大原则 1、数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据...

  • 字节对齐之struct大小计算方式

    内存对齐主要可以提高cpu的寻址访问速度,以及方便在各平台之间移植等作用。 下面介绍一下字节对齐后struct和u...

网友评论

      本文标题:Go内存优化(一)— struct对齐

      本文链接:https://www.haomeiwen.com/subject/fjjayftx.html