最近在拜读 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 2018-08-24 15:45:22 +08:00
注释不是说了嘛,为了让 Stats 字段对齐。
看一下 sync/atomic 的文档 https://godoc.org/sync/atomic#pkg-note-bug 在 32 位平台下,原子操作会出问题,需要用户手动对齐。 |
2
Lighfer OP @icexin 注释我是看明白了是为了让 Stats 对齐,但是不明白的地方是为什么非要让它对齐,如果不对齐的话不是可以更加节省内存吗? 看了你贴的链接就明白了,十分感谢解答!!
|
3
sujin190 2018-08-25 11:30:48 +08:00 via Android
stats 有并发的原子操作的吧,是不是为了防止伪共享的问题吧,再说浪费这点空间算啥问题
|