哪种方法更好,性能明智
Which approach is better, performance wise
假设我们有一个非常简单的算法来检查 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( 更快,因为它不会复制函数内部的a
和b
变量?我确实意识到,对于这个特定示例,执行时间差异几乎为零,但我很高兴知道在涉及复杂函数和传递的数据时是否会有更大的差异。
由于int
是内置在类型中的,如果没有内联,那么在int
上使用指针将比直接使用它们慢。int
复制成本低廉,存储成本不会比指针高,但指针在使用数据之前需要取消引用。
所以在这种情况下,使用max
,编译器可能会编写相同的代码(尝试 godbolt.org(,但对于更复杂的函数,或者如果函数在另一个编译单元中并且您没有使用链接时间优化,您将看到速度的差异。有时。
当然,如果它不仅仅是一个int
,那么这将取决于。你必须测量(两个指针通常没问题,这就是string_view
"是"(。
相关文章:
- 哪种方法更好,性能明智
- Msgpack能否提供更好的性能和与Python的struct.pack()相同的功能?
- 静态常量与常量局部变量,哪一个性能更好
- 在 C++ 中使用 OpenMP 并行化两个 for 循环不会提供更好的性能
- 为什么 C++ 代码实现的性能不比 python 实现更好?
- 如何通过更好的性能传递和共享共享的所有权
- 牢记干净的代码的性能,什么更好
- MongoC ++驱动程序BSON构造:基于流与基于字符串解析.哪一个性能更好?
- 是否有更好的方法(性能提高 /内置功能)获得矩形的旋转角度
- 对于阵列复制,const&的性能更好吗?
- 将中间变量用于三元运算符(或类似运算符)以获得更好的性能
- 全局对象是否提供比多个本地实例更好的性能
- 我们是否应该将指向类实例的智能指针存储在大型 std::vector 中以获得更好的性能?
- C++程序在管道传输时性能更好
- 在OpenGL中为顶点、uvs和法线使用一个缓冲区是否比使用三个缓冲区性能更好
- 哪一个性能更好:使用函数或精确代码
- C++特征库如何比专门的供应商库性能更好
- 为什么具有多个后缓冲区对性能更好
- 相同的 Direct2D 应用程序在"slower"计算机上的性能更好
- 哪个性能更好?标准::数组或 C 数组