把函数拆分,分成更小的子函数到代码中,能不能影响程序的效率?在减少函数的圈复杂度的同时,我将函数分解成更小的部分,并对其使用了帮助函数和内联函数。
void functionParent(arguments)
{
intialCheckFunction(arguments);
functionOne();
functionTwo();
functionThree();
functionFour();
return STATUS;
}
void functionOne()
{
/*follows unary Principle.*/
}我关心的是堆栈指针,SP的频繁切换是大大降低了程序的效率,还是可以忽略不计。上面的functionOne,两个,..里面有UNARY逻辑。在这两个上下文中,C和C++都是Kindenter code here唯一的回复
发布于 2012-06-28 18:55:09
一般来说,我更喜欢将函数拆分成更小的函数,这样我们就可以在其他地方重用它,这在重构过程中经常是需要的。如果你非常关心开关,如果函数真的很小,你可以把它标记为内联。然而,我不认为拥有太多的函数会使你的程序在性能上产生如此巨大的差异。
发布于 2012-06-28 18:55:46
只要您认为逻辑有助于提高可读性,就应该将逻辑拆分到它自己的函数中:函数调用本身的成本可以忽略不计。
尽管调用函数通常会消耗一些空间和CPU周期,但您根本不必担心这一点:涉及的指令经过了令人难以置信的优化,编译器可以在它认为合适的时候内联您的代码。
编辑(响应comment by Potatoswatter)
需要注意的一件事是传递参数,特别是在C++中,用户代码可以参与复制传递给函数的参数的过程。在C中,通过值传递大的struct也会占用更多的周期,所以只要有可能,就应该通过引用或指针传递它们。
发布于 2012-06-28 20:13:03
如果你使用的是C++,你可以声明内联函数。这样,一旦代码在行中被替换,就不会发生因函数调用而产生的开销。
inline bool check(args){
if( some_condiction(args) ){
return true;
}
}
inline void functionOne(){...}
inline void functionTwo(){...}
inline void functionThree(){...}
inline void functionFour(){...}
int functionParent(arguments){
if(check(arguments)==false)
return FAIL;
functionOne();
functionTwo();
functionThree();
functionFour();
return STATUS;
}当前的处理器架构每次执行一条以上的指令,比方说5次。在给定的时刻,它们可能处于完成的中间阶段,比方说90%,80%,70%,60%,50%。如果第一条指令是一个函数调用,那么所有计算下4条指令的努力都将是徒劳的,这将大大降低程序的执行速度。
没有必要太关心这些细节,除非你正在创建一个关键的应用程序。通常,当使用优化标志时,编译器足够聪明,能够内联所需的函数。
https://stackoverflow.com/questions/11243034
复制相似问题