c ++如何使用我的函数来提高效率?

Yot*_*tam 0 c++ performance

我正在运行一个模拟,需要一些时间来运行,我想改进它.根据我的理解,将值传递给函数意味着复制的值很慢.有没有办法在一个专用文件中包含一些函数,我不需要复制值?

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

谢谢

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

int i = 0;
while (i < 10000000){
  i = doStuff(i); //or doStuff();
}

int doStuff(i){
  return i++;
}

int doStuff(){
  return i++;
}
Run Code Online (Sandbox Code Playgroud)

我很确定doStuff()案例的速度要快10倍.我已将我以前的代码更改为全局变量和直接访问("错误的编程"),它显着改善了我的运行时间.我试图使用引用,但我有一些固有的问题阻止我这样做(我不记得它是什么).无论如何,我现在正在玩gprof.

Rob*_*obᵩ 6

你可以使用参考.如果你有一些功能:

void Examine(BigHairyObject o) {
    cout << o.data[1234]; /* for example */
}
Run Code Online (Sandbox Code Playgroud)

您可以通过传递对该对象的引用来避免副本:

void Examine(BigHairyObject & o) {
    cout << o.data[1234]; /* use is identical */
}
Run Code Online (Sandbox Code Playgroud)

这样做的缺点是,你只是指原始对象,而不是它的一些副本.因此,如果您修改o(在此示例中),您实际上是在修改调用者的对象.

如果您希望保证不修改对象(在这种情况下,引用通常与副本一样好),请使用const关键字:

void Examine(const BigHairyObject & o) {
    cout << o.data[1234]; /* use is identical */
    // o.data[1234] = 5; // would cause compile error.
}
Run Code Online (Sandbox Code Playgroud)