go结构体内存对齐
目录:
1:问题
2:内存对齐
3:内存优化
一、问题
给定两个结构体,分析下各种占用的内存空间是多少?
package main
import (
"fmt"
"unsafe"
)
type M1 struct {
i1 int8 //1 byte
i2 int64 //8 bytes
i3 int32 //4 bytes
}
type M2 struct {
i1 int8 //1 byte
i2 int32 //4 bytes
i3 int64 //8 bytes
}
func main() {
//比较下M1和M2 是不是都是 等于13?
m1:=M1{}
fmt.Println(unsafe.Sizeof(m1)) //24
m2:=M2{}
fmt.Println(unsafe.Sizeof(m2)) //16
}
事实上m1的占用是24 ,m2的占用是16
为什么会和我们想象的不一样!这就要知道内存对齐的知识了!
二、内存对齐


m1:i1进行后面会填充 i3也进行填充,i2 一次就可以抓取完。那么一共是占内存24个字节。

我们调整顺序把i2放到i1去,这样我们的内存无形中就少占用了8个字节

三、内存优化
那我们上面时候去做这种优化?



浙公网安备 33010602011771号