通过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
根据上面的结果发现,不同的位置顺序对应的内存大小占用是有可能相差很大的