const int&performance 问题

const int& performance issue

本文关键字:问题 performance int const      更新时间:2023-10-16

我以前曾在stackoverflow上问过一个问题(如果您感兴趣的话,请链接:通过参考"高级"概念?)

有趣的是,一个答案吸引了我,我觉得这应该是一个单独的问题。

const int& x = 40;

如果40恰好是CPU缓存中的一个值(RVALUE)。那么,您会通过编写该行,只是保留缓存内存以保留过程中的数字40?那不是一件坏事吗?

谢谢

字面的 40几乎可以肯定生活在某些只读内存中,可能是在汇编器中(对于较小的值,通常有指令可以设置寄存器或地址;对于较大的值,它将是生活在某个地方)。它不在"缓存"中生活。当您创建对其的const引用时,在编译器认为适合保持临时性的地方(可能在堆栈上)的任何地方都会构建一个临时性。这是否存在在任何缓存中都取决于系统。

如果从来没有采取此临时的地址,则实际上甚至可能没有创建:C 标准中的所有规则均由" fif" -rule管辖。结果,参考和文字将是相同的。如果曾经获取const参考的地址,则编译器需要决定将对象放在哪里,并且您确实可以看到较小的性能影响。

您无法从程序上保留缓存上的空间

这不是您的控制。缓存控制的决策是由其自己的控制器做出的,该控制器研究时间和空间局部性,除其他方面可以决定要替换哪个缓存线以及保留哪些缓存线。

通常有数据的多个副本,在不同的缓存和虚拟内存地址空间(映射到物理内存 交换)上。


管理内存的方式比这复杂得多。系统处理内存时,系统每次都会生成虚拟地址。

此虚拟地址为翻译成到物理地址。该翻译可以在缓存,物理内存等上产生一个地址。它不一定映射到一件内存。如果已交换,则会导致页面故障,然后将该页面加载到内存(多个级别)中。

诸如缓存管理之类的低级操作在此级别的决定不影响