在程序中使用几个小函数会影响性能吗?

时间:2013-09-01 09:30:41

标签: c performance function

如果C程序包含几个小函数,如:

int isLetter(const char c){
    if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){
        return 1;
    }
    return 0;
}

int isNumber(const char c){
    if(c >= '0' && c <= '9'){
        return 1;
    }
    return 0;
}

它会比实现代码内联的类似程序效率低吗?

3 个答案:

答案 0 :(得分:5)

这个问题的答案取决于很多情境变量。如果很少调用该函数,编译器可以自动内联它以增加代码局部性并消除函数调用的开销;如果经常调用它,则内联函数代码会增加程序的大小并降低缓存效率。有一个很好的平衡,编译器通常是最有资格找到的。

话虽如此,除非您正在开发具有严格内存要求的嵌入式系统,否则不要考虑这个问题。专注于使您的代码可读和可重用,只有当您发现问题时才回过头来优化它。过早优化会浪费开发时间,并且通常会导致您在为不必要的性能改进牺牲可维护性时引入错误。

答案 1 :(得分:2)

不,效率不会低。它要么同样有效,要么效率更高。编译器内联小函数是自主的,它们的启发式非常好。此外,即使 if 编译器的内联决策结果不是最理想的,您也不必为了获得更好的性能而使用宏或手动内联 - 在几乎任何主要的编译器中,都有办法强制或防止函数内联,你仍然可以通过宏和手动代码获得函数的好处。

答案 2 :(得分:0)

您可以编写一个函数并将其声明为inline,并让编译器自动为您内联。

对于您正在使用的功能,如果我没记错的话,标准库中有等效的ctype.h