golang中的内存对齐

通过unsafe.Alignof查看内存对齐情况,在X64中8位对齐,在x86中4位对齐
int在X64中相当于int64,在x86中相当于int32,所以对应的长度分别是8和4
string在X64中长度16,在X86中长度为8
[]数组长度在X64为24,X86为12

下面两个结构体的长度计算

type s1 struct {

a byte   //1
b int    //8
c int8   //1
d []byte //24
e int    //8
f byte   //1
g string //16

}
在X64长度为80,在X86长度为40,将结构体更改顺序后生成s2如下

type s2 struct {

a byte   //1
b byte   //1
c int8   //1
d int    //4
e int    //4
f string //8
g []byte //12

}
s2在X64长度为64,在X86长度为32

根据上面的结果发现,不同的位置顺序对应的内存大小占用是有可能相差很大的

上一篇:mysql union 的用法


下一篇:我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。