Go 内存分配:结构体中的优化技巧( 二 )


type y struct {b stringd int32a int8c int8}var v = y{}fmt.Println("字段a的偏移量:", unsafe.Offsetof(v.a)) // 输出:20fmt.Println("字段b的偏移量:", unsafe.Offsetof(v.b)) // 输出:0fmt.Println("字段c的偏移量:", unsafe.Offsetof(v.c)) // 输出:21fmt.Println("字段d的偏移量:", unsafe.Offsetof(v.d)) // 输出:16fmt.Println("Example的大?。?quot;, unsafe.Sizeof(v)) // 输出:24我们可以看到,通过重新排列字段的位置,使得对齐需要最小化填充 , 我们已经将结构体的大小从32减小到24,这是内存优化的巨大进步,达到了25% 。
当前的内存占用是16(b)+ 4(d)+ 1(a)+ 1(b)+ 2(填充) 。
遗憾的是,由于语言和架构的限制,我们无法进一步去除填充 。




推荐阅读