最近发现公司代码很多人定义结构体的时候不注意字段对其
如下:
type AuditTaskTemplateDetail struct {
IsTemplate bool `json:"isTemplate"` //1 byte
TemplateName string `json:"templateName"` //16 byte
BatchCount int32 `json:"batchCount"` //4 byte
}
看起来上面好像占用的空间都是 21字节,但是结果却不是这样。如果使用 GOARCH=amd64 编译代码,发现 AuditTaskTemplateDetail 类型占用 32 个字节,因为数据结构对齐,感兴趣的可以搜搜。在 64 位体系结构中,内存分配连续的 8 字节数据,所以不对齐的会被自动填充。
那么如何定义才是最好的,下面就是答案:
type AuditTaskTemplateDetail struct {
TemplateName string `json:"templateName"` //16 byte
BatchCount int32 `json:"batchCount"` //4 byte
IsTemplate bool `json:"isTemplate"` //1 byte
}
当然,调整struct有工具叫fieldalignment,具体使用方法可以看看这篇文章。
本文探讨了Go语言中结构体字段对齐的问题,指出不合理的字段顺序可能导致额外的内存开销。在64位系统上,内存分配遵循特定规则,导致空间浪费。解决方案是调整结构体字段顺序,确保按大小排列。推荐使用fieldalignment工具辅助优化。通过调整,例如将较小的字段放在最后,可以减少 AuditTaskTemplateDetail 类型的内存占用。

被折叠的 条评论
为什么被折叠?



