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个字节
三、内存优化
那我们上面时候去做这种优化?