我之前曾问过一个关于 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/