将函数拆分成较小的子函数到代码中,可以影响程序的效率吗? 在减少函数的圈复杂度的同时,我将函数分解为更小的部分,并使用了辅助函数和内联函数。
void functionParent(arguments)
{
intialCheckFunction(arguments);
functionOne();
functionTwo();
functionThree();
functionFour();
return STATUS;
}
void functionOne()
{
/*follows unary Principle.*/
}
我关心的是堆栈指针,SP的频繁切换会大大降低程序的效率,也可以忽略不计。
上面的函数One,Two,..正在使用UNARY Logic。
善意的enter code here
回复在上下文中,C以及C ++
答案 0 :(得分:3)
只要您认为逻辑有助于提高可读性,就应该将逻辑拆分为自己的函数:函数调用本身的成本可以忽略不计。
虽然调用函数通常会消耗一些空间和CPU周期,但您根本不应该担心它:所涉及的指令经过了优化,并且编译器可以在其认为合适时内联您的代码。
编辑(响应comment by Potatoswatter)
您需要注意的一件事是传递参数,尤其是在C ++中,用户代码可以参与复制传递给函数的参数的过程。按值传递大的struct
也可能在C中花费多个周期,因此您应该尽可能通过引用或指针传递它们。
答案 1 :(得分:0)
通常我更喜欢将函数分解为更小的函数,以便我们可以在其他地方重用它,在重新分解期间通常需要它。如果您非常关心开关,如果功能非常小,您可以将其标记为内联。但是我不认为有太多的功能会对你的程序性能产生如此巨大的影响。
答案 2 :(得分:0)
如果您使用的是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条指令而做的所有努力都将是徒劳的,这将大大降低程序的执行速度。
除非您正在创建关键应用程序,否则不需要过多关注这些细节。通常,编译器足够聪明,可以在使用优化标志时内联所需的函数。