哪种方法更好,性能明智

Which approach is better, performance wise

本文关键字:性能 更好 方法      更新时间:2023-10-16

假设我们有一个非常简单的算法来检查 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;
}

(二(

#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"是"(。