1

如果一个 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;
}

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

4

3 回答 3

5

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

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

于 2013-09-01T09:36:28.163 回答
2

不,它不会降低效率。它要么同样有效,要么更有效。编译器自动内联小函数,它们的启发式方法非常好。此外,即使编译器的内联决策被证明是次优的,您也不必放弃宏或手动内联来获得更好的性能 - 在几乎任何主要编译器中,都有强制或阻止函数内联的方法,并且您仍然可以获得函数相对于宏和手动代码的好处。

于 2013-09-01T09:39:38.093 回答
0

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

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

于 2013-09-01T09:37:18.223 回答