[译] Go语言结构体中属性的顺序将影响结构体的大小

微信扫一扫,分享到朋友圈

[译] Go语言结构体中属性的顺序将影响结构体的大小

Go语言中,结构体的大小取决于内部属性的类型以及它们的排列顺序。

struct {
    a bool
    b int32
    c string
    d string
}

上面这个结构体的大小和下面这个结构体的大小是不同的,尽管它们只是属性的定义顺序不同。

struct {
    b int32
    c string
    d string
    a bool
}

为什么会这样?可以把内存想象成是由一个一个固定大小的小盒子组成的。如果结构体的某个属性的大小大于当前盒子剩余的大小,那个这个属性将填入下一个盒子中。这将造成上一个盒子的尾部空间没有被填入数据,但是却占用了内存。这种结构体初始化每个变量实例时都会有这种情况。

这里有一个非常棒的网站( http://golang-sizeof.tips/ ),你可以在这个网站上输入一个结构体的定义,然后查看内存布局。我们拿上面第一个结构体来看:

下面是第二个结构体的展示:

感谢这个网站。下次当你有一个非常大的结构体类型的数组时,就可以通过这个网站来估算数组的内存大小了。

英文链接: Preslav Rachev | Reduce Struct Size by Laying out Attributes Accordingly https://preslav.me/2019/08/27/reduce-struct-size-by-laying-out-attributes-accordingly/

Understanding Input and Output shapes in Convolution Neural Network | Keras

上一篇

新兴营销玩法下,品牌经理真的要退出历史舞台了吗?

下一篇

你也可能喜欢

[译] Go语言结构体中属性的顺序将影响结构体的大小

长按储存图像,分享给朋友