传递常量引用:性能提高
Passing const reference: performance increase?
之间是否存在任何有价值的性能差异
int myFunction(const int &a) { return 2 + a; }
这个:
int myFunction(int a) { return 2 + a; }
据我所知,第二个方法将作为参数传递的变量复制到一个新寄存器,这需要在asm代码中执行更多指令。这个函数每秒被调用一千次,在这种情况下性能至关重要,传递常量引用而不是变量更好吗?
如果你的编译器看不到这两位代码有相同的效果,那它就是一块垃圾,你不应该使用它。
但你的论点是无稽之谈。以下是两者的天真实现:
1:int myFunction(const int &a) { return 2 + a; }
传递a
的地址。从该地址获取值。再加两个。退回。
2:int myFunction(int a) { return 2 + a; }
传递a
的值。再加两个。退回。
请注意,第二个操作避免了两个操作——获取a
的地址,然后从该地址获取a
的值。更糟糕的是,第一个只有在a
存储在内存中时才有效,这意味着如果它还没有存储在内存,就必须将其存储在内存。哎哟
一秒钟只打一千个电话,不会有多大区别。但对于编译器可能无法同时查看所有内容的更复杂的情况,标准做法是按值传递"小"类型。只有当额外间接寻址的成本小于复制值的成本时,才希望通过引用传递。
对于小类型,通过值传递它们可能比通过常量引用传递更有效,因为引用增加了间接级别。
对于这里小类型的定义,您应该进行度量,但对于平台的单词大小(例如int、float(左右的值,您最好通过值传递。
通常第二个函数定义比第一个更有效,因为在第一个函数定义中使用了对参数的间接引用。
相关文章:
- C++ 特征库:引用的性能开销<>
- 性能:指针在C++中取消引用
- 通过查看程序集来比较按值传递与按引用传递性能
- C++14 通过引用返回一个值以优化性能
- 通过常量引用传递基本值真的会损害性能吗?
- 通过将返回值绑定到const引用,C++性能得到改善
- 使用"this ->"引用类的成员是否有好处或性能提升?
- c++重新评估引用转发性能
- c++重复箭头运算符取消引用性能与点运算符
- 通过移动语义和右值引用改进了性能
- 为方便起见,本地指针/引用的性能
- 什么时候对象足够大,以至于通过引用而不是通过值传递可以获得性能增益
- c++左值,右值,引用,参数和性能
- 通过值传递与通过引用或指针传递的性能代价
- 传递常量引用:性能提高
- 对象,引用对象,引用带函数和不带函数的向量元素-观察到的性能差异
- 标记方法指针/引用参数常量真的会显著影响性能吗
- openMp:调用动态数组的共享引用时性能严重损失
- 通过引用或指针访问的性能差异
- 多指针解引用与引用之间的性能差异