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个字节

 

 三、内存优化

那我们上面时候去做这种优化?

 

 

 

posted @ 2022-03-02 15:03  你是我的神奇  阅读(74)  评论(0编辑  收藏  举报