c++如何高效的用我的函数使用
c++ How to be efficient with my function use?
我正在运行一个需要一些时间运行的模拟,我想改进它。从我的理解,传递一个值给一个函数意味着这个值被复制,这是缓慢的。是否有一种方法,包括一些功能在一个专用的文件,我不需要复制的值?
我不介意做"错误的编程"(全局变量,公共访问等)来获得速度。
感谢编辑:当我开始我的项目,我测试了几个循环。我计算了这种循环的开始和结束之间的处理器样式:
int i = 0;
while (i < 10000000){
i = doStuff(i); //or doStuff();
}
int doStuff(i){
return i++;
}
int doStuff(){
return i++;
}
我很确定doStuff()的情况快了10倍。我已经改变了我以前的代码全局变量和直接访问("错误的编程"),它改善了我的运行时显著。我试图使用参考,但我有一些固有的问题,这使我不能这样做(我不记得是什么)。不管怎样,我现在在玩gprof。
您可以使用引用。如果你有一些功能:
void Examine(BigHairyObject o) {
cout << o.data[1234]; /* for example */
}
可以通过传递对该对象的引用来避免复制:
void Examine(BigHairyObject & o) {
cout << o.data[1234]; /* use is identical */
}
这样做的缺点是,您只引用了原始对象,而不是它的某个副本。所以,如果你修改了o
(在这个例子中),你实际上是在修改调用者的对象。
如果您希望保证不修改对象(在这种情况下,引用通常与副本一样好),请使用const
关键字:
void Examine(const BigHairyObject & o) {
cout << o.data[1234]; /* use is identical */
// o.data[1234] = 5; // would cause compile error.
}
处理性能调优的方法是让运行的程序告诉您应该优化什么。这可能与你所想的不同,而且你可以解决的问题可能不止一件。
如果你的猜测是正确的,它与函数调用和全局变量有关,我会很惊讶。但是,无论如何,程序本身可以告诉你。
这里有一个例子来说明我的意思。这是一个模拟程序,通过修复无法猜到的东西来获得非常大的加速。
相关文章:
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 查找定义我的 C/C++ 函数/宏的文件比'grep'更简单的方法
- 为什么我的 constexpr 对象在我的函数中不是 constexpr?
- 为什么我的函数接受"std::string"进行排序不会改变它?
- 为什么 emscripten 不编译我的函数?
- binary_search() 函数在我的函数体中不起作用
- 如何将不同大小的数组传递给我的 C++ 函数?
- 如果我想使用 cout 为我的函数提供任何输入......我该如何给出
- (C++)我的函数不返回数组
- 如何让我的重载<<运算符打印出我的函数?
- 我的函数调用 (C++) 中的未声明标识符
- 钩/绕道 d3d9 (现在/结束场景) - 似乎调用我的函数然后崩溃
- 成员函数的"this"参数具有"const"类型,但我的函数实际上不是"const"
- 我应该声明我的函数模板专业化还是定义它们就足够了
- 为什么我的函数名称中会随机出现一个额外的字母
- 为什么我的函数无法使用指针打印多维数组的元素?
- 当我从头文件和实现文件调用我的函数到我的主文件时,我没有得到任何输出
- 钩子SSDT.其他驱动程序使用我的函数
- 如何修复我的函数 popFront 为我的列表?