const int&performance 问题
const int& performance issue
我以前曾在stackoverflow上问过一个问题(如果您感兴趣的话,请链接:通过参考"高级"概念?)
有趣的是,一个答案吸引了我,我觉得这应该是一个单独的问题。
const int& x = 40;
如果40恰好是CPU缓存中的一个值(RVALUE)。那么,您会通过编写该行,只是保留缓存内存以保留过程中的数字40?那不是一件坏事吗?
谢谢
字面的 40
几乎可以肯定生活在某些只读内存中,可能是在汇编器中(对于较小的值,通常有指令可以设置寄存器或地址;对于较大的值,它将是生活在某个地方)。它不在"缓存"中生活。当您创建对其的const
引用时,在编译器认为适合保持临时性的地方(可能在堆栈上)的任何地方都会构建一个临时性。这是否存在在任何缓存中都取决于系统。
如果从来没有采取此临时的地址,则实际上甚至可能没有创建:C 标准中的所有规则均由" fif" -rule管辖。结果,参考和文字将是相同的。如果曾经获取const
参考的地址,则编译器需要决定将对象放在哪里,并且您确实可以看到较小的性能影响。
您无法从程序上保留缓存上的空间 这不是您的控制。缓存控制的决策是由其自己的控制器做出的,该控制器研究时间和空间局部性,除其他方面可以决定要替换哪个缓存线以及保留哪些缓存线。 通常有数据的多个副本,在不同的缓存和虚拟内存地址空间(映射到物理内存 交换)上。 管理内存的方式比这复杂得多。系统处理内存时,系统每次都会生成虚拟地址。 此虚拟地址为翻译成到物理地址。该翻译可以在缓存,物理内存等上产生一个地址。它不一定映射到一件内存。如果已交换,则会导致页面故障,然后将该页面加载到内存(多个级别)中。 诸如缓存管理之类的低级操作在此级别的决定不影响。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- const int&performance 问题