直接使用函数参数vs创建局部变量
Using function arguments directly vs Creating local variables
考虑一个函数的这两种实现:
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双值将是一个更好的解决方案]。
如果性能(特别是在这个函数中)很重要,那么生成一个基准。但是,在开始"搞乱"函数之前,请确保您知道哪些函数在代码中消耗了大部分时间。当整个执行时间是几个小时(数十亿个周期)时,从一个运行了几十次的函数中削减两个时钟周期没有多大意义。
相关文章:
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 在VS Code中编译C / C ++时如何禁用自动创建EXE文件?
- 从现有项目(VS)创建静态库
- 如何在VS Code中创建C++项目并链接主,函数和标题?
- 使用库时的标准 - 使用库的数据类型 VS 创建我自己的类型?
- 无法创建或打开 *.VS 2015 中的 VC.db 文件(桌面快速版)更新 3RC
- 在C++VS中创建和保存映像
- C vs Java:无尽的循环创建对象仅崩溃C
- VS 2013 社区 - 创建代码片段
- 无法在VS 2013、Windows 8.1中创建Win32控制台应用程序
- 在使用 VS-add 创建项目时不能包含 Qt 类
- 2个项目可以在MS VS 2008中创建单个DLL
- 拥有特定于实例的io_service、解析器等可以 VS 在每个函数中创建它们
- 如何在VS Community 2015中创建C++控制台应用程序
- 如何在 MFC 中访问主对话框的元素?元素是在可视化编辑器VS 2012中创建的
- 无法加载或创建项目 VS 2015.1.无法创建 Visual c# 2015 编译器
- 直接使用函数参数vs创建局部变量
- 使用msbuild在没有vs的计算机上编译由vs2010创建的vcxproject
- 在方法中实例化对象vs.创建类成员
- 创建对象,局部变量vs右值引用