函数是结构化程序设计的产物,它使代码更加模块化,耦合性更低,重用性更高。不过,函数调用会带来额外的开销,除了引起跳转外,还会产生额外的指令。
人都有这样的经验,做一件事情时,如果被人打断,重新再回来做这件事情,就需要一段恢复时间,如果老是被打断,那事情就没法做了。函数调用也是这样,要进行参数压栈出栈、寄存器保存、指令跳转等。多个步骤如果程序的性能要求较高,就可以将一些小的函数直接转换成代码。
1.将小函数直接写成语句
下面这个求最小值的函数,可以直接用函数的内容替换函数调用。
int min(int a, int b)
{
return a<b? a: b;
}
c = min(a, b);
//直接写为
c = a<b? a: b;
2.将小函数写成宏
如果调用的地方很多,用函数调用的方式会显得代码简洁。一种即保持代码简洁又能减少函数调用的做法是将函数体声明为宏。
#define min(a,b) ((a)<(b)) ? (a) : (b)
c = min(a,b);
3.将函数声明为内联函数
如果嫌改为宏的方法太麻烦,还有一种简单的方法,就是将函数声明为inline,编译器会自动用函数体覆盖函数调用。
inline int min(int a, int b)
{
return a<b? a: b;
}
c = min(a, b);
//编译器会将代码优化成
c = a<b? a: b;
本文节选自《大话处理器》第6章。
一台电脑要真正做到优秀,它的硬件和软件是必须紧密联系在一起的。——乔布斯
作者微博: weibo.com/muxiqingyang