在现代计算机中,我知道当前代码区域位于高速缓存中。然而,在许多计算机语言实现中,本地(自动)变量将位于堆栈上,因此会对堆栈进行大量内存访问。
在正常架构中,堆栈是否位于另一个缓存中?
如果不是,则假设堆栈可以重新定位到“本地”,即非常靠近当前代码段,以便它将位于用于代码的高速缓存内。这会加快自动变量的内存访问速度吗?
大多数现代计算机都会不加区别地缓存内存,因此 CPU 访问的任何内存都会被缓存。所以,这包括内存和堆栈。事实上,堆栈很可能几乎一直被缓存,因为它被频繁访问。
对堆栈进行缓存的主要问题是,由于它被频繁修改,可能会导致缓存与主内存不同步并触发缓存未命中,这会损害性能。这通常不会发生,因为大多数架构都使用所谓的回写缓存,这意味着每个缓存块,称为缓存行,有一个脏位,并在需要时使用缓存的延迟副本返回主内存。这通常会导致主内存更新相对较少,并且性能会很好。
但是,如果两个不同的线程尝试写入同一内存,则可能会出现性能问题。这可能会导致连贯性缺失,导致缓存写入和更新到内存并降低性能。通常,软件的结构不会使两个不同的线程使用相同的堆栈。但是,如果发生这种情况,则某些体系结构上的性能可能会很差,因为不同线程的堆栈访问冲突会导致频繁的缓存未命中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)