打印struct中Field内存对齐的小工具
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
1. 引言
因为使用golangci-lint时长有关于内存对齐的告警提示,所以做了一个小工具,可以查看struct中Field在内存中的对齐情况
传送门:
vearne/mem-align
2. 使用
package main
import (
"github.com/vearne/mem-align"
)
type Car struct {
flag bool
age int32
F1 int8
age2 int32
age3 int16
F2 int64
F3 *int32
InnerStruct struct{
InnerByte byte
//InnerStr string
}
F4 []byte
Name string
F5 error
}
func main(){
memalign.PrintStructAlignment(Car{})
}
输出:
相同字符,相同颜色的的字符,表示同一个Field。
后记
其实golang官方在go vet中提供了一个子工具fieldalignment
golangci-lint也是使用这个分析器进行内存对齐的检查
安装 fieldalignment
go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest
使用-fix参数可以直接修改代码文件
fieldalignment -fix {packagePath}
参考资料
- opennota/check
- mdempsky/maligned
- Structure size optimization in Golang (alignment/padding)
- size and alignment guarantees
- fieldalignment