Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++如何高效利用我的函数?_C++_Performance - Fatal编程技术网

C++如何高效利用我的函数?

C++如何高效利用我的函数?,c++,performance,C++,Performance,我正在运行一个需要一些时间才能运行的模拟,我想对此进行改进。据我所知,将值传递给函数意味着该值被复制,这很慢。是否有一种方法可以在专用文件中包含一些函数,而不需要复制这些值 为了提高速度,我不介意错误地编程全局变量、公共访问等 谢谢 编辑:当我开始我的项目时,我测试了几个循环。我计算了这种循环的开始和停止之间的处理器样式: int i = 0; while (i < 10000000){ i = doStuff(i); //or doStuff(); } int doStuff(i)

我正在运行一个需要一些时间才能运行的模拟,我想对此进行改进。据我所知,将值传递给函数意味着该值被复制,这很慢。是否有一种方法可以在专用文件中包含一些函数,而不需要复制这些值

为了提高速度,我不介意错误地编程全局变量、公共访问等

谢谢

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

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

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

int doStuff(){
  return i++;
}

我很确定Dostaff的案子快了10倍。我将以前的代码改为全局变量,并直接访问错误的编程,这大大改善了我的运行时。我试图使用参考资料,但我有一些固有的问题,阻止我这样做,我不记得它是什么。不管怎样,我现在在和gprof玩

您可以使用参考资料。如果您有一些功能:

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

进行性能调优的方法是让正在运行的程序告诉您应该优化什么。这可能与您的想法不同,而且您可能可以修复不止一件事情

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


这是一个模拟程序,通过修复无法猜到的东西,可以获得非常大的加速。

查找函数的内联-如果可能,大多数现代编译器都会尝试这样做。将[optimization][c++]放在搜索框中并读取。但首先要了解分析。您可以查看内联函数,也可以通过引用而不是通过值向函数传递数据。但是首先运行一个分析器来找出真正的瓶颈,而不是感知到的瓶颈。完全有可能按值传递参数与性能问题无关。您需要进行一些分析/分析,以找出真正可能存在的问题。依靠一个非特定的经验法则,通过价值缓慢会很好地引导你走一条非生产性的路径。你从哪本C++书中学到的?
void Examine(BigHairyObject & o) {
    cout << o.data[1234]; /* use is identical */
}
void Examine(const BigHairyObject & o) {
    cout << o.data[1234]; /* use is identical */
    // o.data[1234] = 5; // would cause compile error.
}