问题描述
我正在为班级的比赛编写程序。它已经很好用了,现在我正在努力让它尽可能快。我的问题是 - 与制作用户定义的函数相比,只是粘贴函数返回的内容,无论我想在哪里使用它,都可以加速我的程序吗?我知道函数调用会导致内存跳转,那么这样做是否可以显着加速我的代码? 在这种情况下,我不关心可读性
例如。而不是这样做
while(something){
y = function();
}
double function(){
return f(x);
}
我这样做
while(something){
y = f(x);
}
我已经做了一些事情,例如通过引用传递结构、避免强制转换、使用移位操作、使用诸如 ++i 之类的东西来加快执行时间,而且我希望获得一点优势。
>解决方法
一般来说,这些都不重要。
优化编译器真的非常擅长确定何时执行强度降低(将乘法转换为加法或移位)或内联(消除函数调用的开销) .
作为人类,您应该将时间和精力集中在编写简洁、可维护和可读的代码上,并具有正确的算法复杂性,然后依靠编译器进行正确的优化。
您可能会在极少数情况下发现手动内联(您正在执行的操作)会产生显着的性能优势,但您应该让分析器将您引导至这样做有益的地方。这样做不仅仅是因为你认为它会更快,因为它通常不会。
此外,您在评论回复中指出您没有使用 -O3
进行编译。这意味着您从编译器获得没有优化帮助。添加-O3
。