2

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

void functionParent(arguments)
{

    intialCheckFunction(arguments);
    functionOne();
    functionTwo();
    functionThree();
    functionFour();

    return STATUS;
}

void functionOne()
{
   /*follows unary Principle.*/
}

我担心的是堆栈指针,SP 的频繁切换是否会大大降低程序的效率,或者可以忽略不计。上面的函数One,Two,.. 中包含一元逻辑。请在两种enter code here情况下回复,C 以及 C++

4

3 回答 3

3

每当您认为它有助于可读性时,您都应该将逻辑拆分为自己的函数:函数调用本身的成本可以忽略不计。

虽然调用函数通常会消耗一些空间和 CPU 周期,但您完全不必担心:所涉及的指令经过优化,超出了想象,编译器可以在认为合适时内联您的代码。

编辑(回应Potatoswatter 的评论

您需要注意的一件事是传递参数,尤其是在 C++ 中,用户代码可以参与复制传递给函数的参数的过程。在 C 中通过值传递大struct的 s 也可能需要多个周期,因此您应该尽可能通过引用或指针传递它们。

于 2012-06-28T10:55:45.847 回答
0

通常我更喜欢将函数分解成更小的函数,以便我们可以在其他地方重用它,在重构过程中经常需要它。如果您非常关心开关并且功能非常小,您可以将其标记为内联。但是,我不认为拥有太多功能会对程序的性能产生如此巨大的影响。

于 2012-06-28T10:55:08.530 回答
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 条指令求值的努力都是徒劳的,这将大大降低程序的执行速度。

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

于 2012-06-28T12:13:02.813 回答