Fork me on GitHub

版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | 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}

参考资料

  1. opennota/check
  2. mdempsky/maligned
  3. Structure size optimization in Golang (alignment/padding)
  4. size and alignment guarantees
  5. fieldalignment

微信公众号

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注