gpt4 book ai didi

c++ - 直接使用函数参数与创建局部变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:14 24 4
gpt4 key购买 nike

考虑一个函数的这两个实现:

double MyFoo::foo(std::vector<double> & v){
double f1 = v.at(1);
double f2 = v.at(2);
double f3 = v.at(3);
double f4 = v.at(4);
double f5 = v.at(5);
double f6 = v.at(6);

double ret = sin(f1)+ sin(f2)+ sin(f3)+ sin(f4)+ sin(f5)+ sin(f6)+ sin(f7);
return ret;
}

double MyFoo::foo(std::vector<double> & v){
double ret = sin(v.at(1))+ sin(v.at(2))+ sin(v.at(3))+ sin(v.at(4))+ sin(v.at(5))+ sin(v.at(6))+ sin(v.at(7));
return ret;
}

这些函数的执行时间是否有明显差异(如果有)?这些局部变量赋值会引入计算开销还是编译器会处理无用的局部变量?

附言sin() 的选择完全是任意的。我的问题集中在局部变量上,而不是内部发生的操作。

最佳答案

如果不实际构建一个执行此操作的系统,我猜这根本没有区别。无论如何,sin 往往会花费相当长的时间,因此对局部变量等的使用所做的任何小的优化很可能是非常微不足道的。

我希望大多数“优秀”的编译器(gcc、Microsoft 等)能够优化掉任何未被广泛使用的局部变量,并生成完全相同的代码。

但就像我说的,如果没有实际尝试这两种方法,很难肯定 [而且我也会删除对 sin 的调用,因为这可能会“隐藏”两者之间的任何细微差异这两个变体 - 只需添加 6 个 double 值将是更好的解决方案]。

如果性能(尤其是在这个函数中)很重要,那么就产生一个基准。而且,在开始“搞乱”函数之前,请确保您知道哪些函数在代码中消耗的时间最多。当整个执行时间为数小时(如此之多的数十亿个周期)时,将运行几十次的函数削减两个时钟周期并没有多大意义。

关于c++ - 直接使用函数参数与创建局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17091947/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com