c++ - const int& 性能问题

标签 c++ reference

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

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

const int& x = 40;

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

谢谢

最佳答案

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

如果此临时对象的地址从未被占用,它实际上可能甚至不会被创建:C++ 标准中的所有规则都受“好像”规则的约束。因此,引用和文字将是相同的。如果 const 引用的地址被占用,编译器需要决定将对象放在哪里,您实际上可能会看到很小的性能影响。

关于c++ - const int& 性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13332379/

相关文章:

vba - 在 Excel VBA 中访问命名单元格的值(内容)

reference - 为什么我可以将不可变引用传递给 BufReader,而不是可变引用?

c++ - 在这种情况下是否需要检查

Python:重新定义函数,使其引用自己

c++ - constexpr 和奇怪的错误

c++ - 如何使用带有非默认构造函数的指针进行 Boost 序列化

reference - 引用 OpenOffice/LibreOffice Calc 中当前行下方的行

c++ - 返回引用的导出函数

c++ - 在类或文件中定义枚举?

c++ - std::vector 是否比 std::list 更容易失败(STL 容器)