
最近在拜读 groupcache 的源码,读到这里就搞不懂了
type Group struct { name string getter Getter peersOnce sync.Once peers PeerPicker cacheBytes int64 // limit for sum of mainCache and hotCache size mainCache cache hotCache cache loadGroup flightGroup _ int32 // force Stats to be 8-byte aligned on 32-bit platforms Stats Stats } 为什么倒二个字段要加上_ int32, 注释给的是强制 8 字节对齐, 但是为什么要这么做?如果不加上这个地段的话,在 32 位系统上可以节约 4 个字节的内存,在 64 位系统上可以节约 8 个字节的内存。
有没有大佬给解答一下?十分感谢!
1 icexin Aug 24, 2018 注释不是说了嘛,为了让 Stats 字段对齐。 看一下 sync/atomic 的文档 https://godoc.org/sync/atomic#pkg-note-bug 在 32 位平台下,原子操作会出问题,需要用户手动对齐。 |
2 Lighfer OP @icexin 注释我是看明白了是为了让 Stats 对齐,但是不明白的地方是为什么非要让它对齐,如果不对齐的话不是可以更加节省内存吗? 看了你贴的链接就明白了,十分感谢解答!! |
3 sujin190 Aug 25, 2018 via Android stats 有并发的原子操作的吧,是不是为了防止伪共享的问题吧,再说浪费这点空间算啥问题 |