Mar*_*les 0 c++ performance const reference function
这之间是否有任何有价值的性能差异:
int myFunction(const int &a) { return 2 + a; }
Run Code Online (Sandbox Code Playgroud)
还有这个:
int myFunction(int a) { return 2 + a; }
Run Code Online (Sandbox Code Playgroud)
?
据我所知,第二种方法将变量的副本作为参数传递给新寄存器,这在asm代码中需要更多的指令.在这种情况下,这个函数被称为千次,性能至关重要,传递const引用而不是变量更好吗?
如果您的编译器无法看到这两行代码具有相同的效果,那么它就是一块垃圾,您不应该使用它.
但你的论点是无稽之谈.以下是两者的天真实现:
1:int myFunction(const int &a) { return 2 + a; }
通过地址a.从该地址获取值.添加两个.把它返还.
2:int myFunction(int a) { return 2 + a; }
通过a的价值.添加两个.把它返还.
注意第二个操作避免了两个操作 - 获取a地址然后a从该地址获取值.更糟糕的是,第一个只有a存储在内存中才有效,这意味着如果它不存在则必须存储在内存中.哎哟.
对于一秒钟只有一千个电话,它不会产生太大的影响.但是对于编译器可能无法一次看到所有内容的更复杂的情况,标准做法是按值传递"小"类型.当额外间接的成本低于复制值的成本时,您只希望通过引用传递.
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |