宏函数:
\#define SQR(i) ((i)*(i))
代码内嵌,避免了函数的调用;
缺点:容易产生歧义;容易使得text段体积增大;编译期间每个代码段复制一份;
宏就是替换,不会进行类型检查
int sqr(int i){
return i*i;
}
缺点:函数调用的压栈和出栈开销;
inline
inline int sqr(int i){
return i*i;
}
优点:避免调用时候的额外开销(出栈入栈)
代价:由于内联函数的函数体在代码段中出现多个副本,因此会增加代码段空间;
本质:以牺牲代码段空间为代价,提供程序运行时间的效率;
适用场景:函数体很小,但是频繁调用;
inline其实是给编译器的一种建议,编译器并不会完全inline