传递const引用:性能提升?

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引用而不是变量更好吗?

Dav*_*rtz 5

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

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

1:int myFunction(const int &a) { return 2 + a; }
通过地址a.从该地址获取值.添加两个.把它返还.

2:int myFunction(int a) { return 2 + a; }
通过a的价值.添加两个.把它返还.

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

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