传递const引用:性能提升?

时间:2014-07-07 13:42:03

标签: c++ performance function reference const

这之间是否有任何有价值的性能差异:

int myFunction(const int &a) { return 2 + a; }

和此:

int myFunction(int a) { return 2 + a; }

据我所知,第二种方法将作为参数传递的变量的副本复制到新寄存器,这在asm代码中需要更多的指令。在这种情况下,这个函数被调用一千次并且性能至关重要,传递const引用而不是变量是否更好?

3 个答案:

答案 0 :(得分:5)

如果您的编译器无法看到这两行代码具有相同的效果,那么它就是一块垃圾,您不应该使用它。

但你的论点是无稽之谈。以下是两者的天真实现:

1:int myFunction(const int &a) { return 2 + a; }
传递a的地址。从该地址获取值。添加两个。归还。

2:int myFunction(int a) { return 2 + a; }
通过a的值。添加两个。归还。

请注意,第二个操作可以避免两个操作 - 获取a的地址,然后从该地址获取a的值。更糟糕的是,第一个仅在a存储在内存中时才有效,这意味着如果它不存在则必须存储在内存中。哎哟。

对于一秒钟只有一千个电话,它不会产生太大的影响。但是对于编译器可能无法一次看到所有内容的更复杂的情况,它的标准做法是通过" small"按价值类型。当额外间接的成本低于复制值的成本时,您只希望通过引用传递。

答案 1 :(得分:2)

对于通过值传递它们的小类型比传递const引用更有效,因为引用添加了一个间接级别。

对于小型类型的定义,您应该进行测量,但对于平台字大小的值(例如整数,浮点数),最好通过值传递。

答案 2 :(得分:1)

通常第二个函数定义比第一个更有效,因为在第一个函数定义中使用了对参数的间接引用。