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