字节对齐问题
我们在项目中有很多Struct结构体的时候,然后它结构体里面字段的排列方式如果不刻意的安排一下的话,因为有些比如说string占用的字节长度和int占用的字节长度是不一样的。会导致有一个内存不对齐,内存浪费的问题。
等我们发现这个问题的时候,想手动去调整,但是因为结构体有很多,手动调整就很麻烦,所以目前就是把这个问题先放下来。
但是这个问题在以前学习计算机组成原理的时候,倒是有了解过计算机的字长是多少【16 位】。操作系统每次处理一个字长需要多少字节。
1-4-1-8-1
=1+3+4+1+7+8+1
=4+4+8+8+1
=8+8+8+1
=25 + (4*8-25)[补全最大值的倍数]
=32
1-1-1-4-8
=1+1+1+1+4+8
=4+4+8
=8+8
=16
检测一下最开始的结构体文件(添加参数指定检测内存对齐):
golangci-lint run --disable-all -E maligned
会看到提示, 该结构体当前占有32B, 可优化至16B. 完美.
会看到提示, 该结构体当前占有32B, 可优化至16B. 完美.
eg:
package main
import (
"fmt"
"unsafe"
)
type T struct {
a bool
b int8
c uint16
d uint32
e int64
f bool
}
func main() {
var t = T{
}
fmt