c++ - 哪种方法更好,性能明智

标签 c++ time

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

(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 变量吗?我确实意识到对于这个特定示例,执行时间差异几乎没有,但我很高兴知道在涉及复杂函数和数据传递时是否会有更大的差异。

最佳答案

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

所以在这种情况下,使用 max,编译器可能会编写相同的代码(试试 godbolt.org),但是对于更复杂的函数,或者如果函数在另一个编译单元中而你不使用链接时间优化,您会看到速度上的差异。有时。

当然,如果它不止是一个int,那就要看情况了。您将必须测量(两个指针通常没问题,这就是 string_view"is")。

关于c++ - 哪种方法更好,性能明智,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52803549/

相关文章:

C++ switch 语句的用法

c++ - 如何有效地从 forward_list 中删除一个元素?

date - 将儒略日期转换为公历日期

time - 在 Fortran 中实现 get_walltime

performance - 为什么 Haskell 函数执行时间测量与 ghc 计时不同?

c++ - 在没有控制台的情况下运行 Win32 程序 "silient"

c++ - 为什么表达式 strlen(cstr1) 没有计算为常量,其中 cstr1 是一个 const char 数组?

c++ - 在 C++ 中声明二维数组

python-3.x - 在python3中导入时间模块

javascript - 从开始时间到结束时间在 php 中划分 20 分钟很多时间