Structslop:GO结构对齐分析器

2020-11-10 06:55:00

Package structslop定义了一个分析器,它检查struct可以被重新排列的字段,以获得最佳的struct大小。

您可以在GO包或GO文件上运行structslop,这与其他GO工具的工作方式相同。

/go/src/github.com/orijtech/structslop/testdata/struct/p.go:30:9:结构的大小为24(大小类32),可以是16(大小类16),重新排列为结构{y uint64;x uint32;z uint32}以获得最佳大小(50.00%的savings)/go/src/github.com/orijtech/structslop/testdata/struct/p.go:36:9:结构大小为40(大小类48),可以是24(大小类32),重新排列为结构{_[0]func();i1int;i2int;A3[3]bool;b bool}最佳大小(33.33%的savings)/go/src/github.com/orijtech/structslop/testdata/struct/p.go:59:9:结构的大小为40(大小类48),可以是32(大小类32),重新排列为结构{y uint64;t*httptest.Server;w uint64;x uint32;Zuint32}大小最佳(33.33%的savings)/go/src/github.com/orijtech/structslop/testdata/struct/p.go:67:9:结构大小为40(大小类48),可以是32(大小类32),重新排列为结构{y uint64;t*s;w uint64;x uint32;z uint32}以获得最佳大小(节省33.33%)。

当前的结构大小是24,Go运行时将为该结构分配的大小是32。

最优的结构大小是16,Go运行时将为该结构分配的大小是16。

也就是说,一些结构可能具有较小的大小,但是为了提高效率,Go运行时会将它们分配到相同大小的类中,那么这些结构就不会被认为是草率的:

具有相同大小的类32,尽管S2布局的大小仅为24字节。