作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最佳答案
这是一个非常低级的计算机体系结构问题,因此如果您没有得到什么,请提问。知道了这一点,我们就进入正题吧。
首先,处理器 L1 高速缓存中的数据被组织在所谓的高速缓存行中。它们的长度通常约为 64 字节。请注意,单个缓存行对于缓存来说是不可分割的 - 我的意思是它作为一个整体被“标记”为有效或无效。
其次,现代处理器具有多个核心,L1 缓存是每核心缓存。因此,他们需要一种以某种方式同步其内容的方法。可能的方法之一是 MESI 协议(protocol)及其“子协议(protocol)”。我建议您阅读它,因为它可以帮助您更好地理解我的答案。但回到正题 - 如果其他核心修改引用相同内存地址的缓存行,MESI 协议(protocol)可能会使一个核心(甚至多个核心)中的缓存行无效。到目前为止一切顺利吧?
因此,了解这些事实后,答案现在就变得非常明显了。如果某些不共享的数据(示例中的互斥体)位于内存中某些共享数据附近,则它可能会进入同一缓存行。使用此非共享内存块可能会导致不必要的和不希望的性能损失
关于c++ - 如果互斥体和数据项在内存中靠近在一起,那么缺点在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62751182/
我是一名优秀的程序员,十分优秀!