将功能逻辑分解为子功能

时间:2012-06-28 10:51:46

标签: c++ c

将函数拆分成较小的子函数到代码中,可以影响程序的效率吗? 在减少函数的圈复杂度的同时,我将函数分解为更小的部分,并使用了辅助函数和内联函数。

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 ++

3 个答案:

答案 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条指令而做的所有努力都将是徒劳的,这将大大降低程序的执行速度。

除非您正在创建关键应用程序,否则不需要过多关注这些细节。通常,编译器足够聪明,可以在使用优化标志时内联所需的函数。