【发布时间】:2021-11-11 12:05:43
【问题描述】:
这个问题的灵感来自一个较早的问题https://stackoverflow.com/a/8469621/14064670。在此链接中,@Phil Miller 提到开头的填充将保证前两个成员最终位于同一缓存行中,但我无法理解。有人能解释一下吗?
开头的填充意味着 buffer_ 和 buffer_mask_ 最终位于同一缓存行上,而不是分成两行,因此需要双倍的内存流量才能访问。
在我看来,当两个成员在开始时,__attribute__ 或 memalign() 都可以提供帮助,但是如果这两个成员在结构的中间呢?
【问题讨论】:
-
阅读 cmets 的答案。填充仅防止错误共享。开头的填充防止与相邻变量的错误共享。它实际上并没有使
buffer_和buffer_mask_共享一个缓存行。
标签: c++ caching padding memory-alignment