c++如何高效的用我的函数使用

c++ How to be efficient with my function use?

本文关键字:我的 函数 高效 何高效 c++      更新时间:2023-10-16

我正在运行一个需要一些时间运行的模拟,我想改进它。从我的理解,传递一个值给一个函数意味着这个值被复制,这是缓慢的。是否有一种方法,包括一些功能在一个专用的文件,我不需要复制的值?

我不介意做"错误的编程"(全局变量,公共访问等)来获得速度。

感谢

编辑:当我开始我的项目,我测试了几个循环。我计算了这种循环的开始和结束之间的处理器样式:

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.
}

处理性能调优的方法是让运行的程序告诉您应该优化什么。这可能与你所想的不同,而且你可以解决的问题可能不止一件。

如果你的猜测是正确的,它与函数调用和全局变量有关,我会很惊讶。但是,无论如何,程序本身可以告诉你。

这里有一个例子来说明我的意思。这是一个模拟程序,通过修复无法猜到的东西来获得非常大的加速。