如果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;
}
它会比实现代码内联的类似程序效率低吗?
答案 0 :(得分:5)
这个问题的答案取决于很多情境变量。如果很少调用该函数,编译器可以自动内联它以增加代码局部性并消除函数调用的开销;如果经常调用它,则内联函数代码会增加程序的大小并降低缓存效率。有一个很好的平衡,编译器通常是最有资格找到的。
话虽如此,除非您正在开发具有严格内存要求的嵌入式系统,否则不要考虑这个问题。专注于使您的代码可读和可重用,只有当您发现问题时才回过头来优化它。过早优化会浪费开发时间,并且通常会导致您在为不必要的性能改进牺牲可维护性时引入错误。
答案 1 :(得分:2)
不,效率不会低。它要么同样有效,要么效率更高。编译器内联小函数是自主的,它们的启发式非常好。此外,即使 if 编译器的内联决策结果不是最理想的,您也不必为了获得更好的性能而使用宏或手动内联 - 在几乎任何主要的编译器中,都有办法强制或防止函数内联,你仍然可以通过宏和手动代码获得函数的好处。
答案 2 :(得分:0)
您可以编写一个函数并将其声明为inline
,并让编译器自动为您内联。
对于您正在使用的功能,如果我没记错的话,标准库中有等效的ctype.h
。