从性能角度考虑,哪种方法更好?

时间:2018-10-14 14:15:27

标签: c++ time

假设我们有一个非常简单的算法,可以检查2个数字之间的最大值:

(1)

#include <iostream>

using namespace std;

int max(int* a, int* b) {
  return (*a > *b ? *a : *b);
}

int main() {
  int a, b;

  cin >> a >> b;
  cout << max(&a, &b) << endl;

  return 0;
}

(2)

#include <iostream>

using namespace std;

int max(int a, int b) {
  return (a > b ? a : b);
}

int main() {
  int a, b;

  cin >> a >> b;
  cout << max(a, b) << endl;

  return 0;
}

第一种情况(1)是否比第二种情况(2)快,因为它没有在函数内复制ab变量?我确实意识到,对于这个特定的示例,执行时间差几乎没有,但是我很高兴知道在处理复杂的函数和传递的数据时,是否会有更大的差值。

1 个答案:

答案 0 :(得分:1)

由于int是内置类型,因此如果没有内联,那么在int上使用指针要比直接使用它们慢。 int复制非常便宜,并且存储成本不会比指针高,但是在使用数据之前,指针将需要取消引用。

因此,在这种情况下,使用max,编译器可能会编写相同的代码(尝试godbolt.org),但是对于更复杂的函数,或者该函数在另一个编译单元中并且您没有使用链接时间优化,您会发现速度有所不同。有时。

当然,如果它大于int,则取决于。您将需要进行测量(通常两个指针都可以,这就是string_view“是”)。