const int&性能问题

时间:2012-11-11 15:08:32

标签: c++ reference

之前我曾询问过有关stackoverflow的问题(如果您对此感兴趣,请点击链接:Passing by reference "advanced" concept?

有趣的是,其中一个答案引起了我的兴趣,我觉得它值得一个单独的问题。

const int& x = 40;

如果40恰好是CPU缓存中的值(rvalue)。那么,通过编写该行,您是否只需保留缓存以在流程的生命周期内保存数字40?这不是一件坏事吗?

谢谢

2 个答案:

答案 0 :(得分:7)

文字40几乎肯定存在于一些只读存储器中,可能存在于汇编程序中(对于小值,通常有指令可以设置寄存器或地址;对于较大的值,它可以作为常量存在于某处)。它不会“存在于缓存中”。当你创建一个const引用时,会在编译器认为适合的任何地方构造临时值来保留临时值(可能在堆栈中)。这是否存在于系统中。

如果从未采用此临时地址,则实际上甚至可能不会创建:C ++标准中的所有规则都由“as if”-rule控制。结果,参考和文字将是相同的。如果始终使用const引用的地址,则编译器需要确定放置对象的位置,实际上,您可能会看到性能影响很小。

答案 1 :(得分:5)

您无法从程序中预留缓存空间

这不是你真正掌控的。缓存控制决策由其自己的控制器决定,该控制器研究时间和空间位置,以及决定要替换哪些缓存行以及要保留哪些缓存行。

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


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

此虚拟地址已翻译到物理地址。这种转换可以在缓存,物理内存等上产生地址。它不一定映射到一块内存。如果它已被换出,则会导致页面错误,并且该页面将加载到内存中(多个级别)。

您在此级别的决策不会影响缓存管理等低级别操作