现在的位置: 首页 > 综合 > 正文

连载:编写高效代码(7) 减少函数调用——不要老打断我

2018年05月07日 ⁄ 综合 ⁄ 共 700字 ⁄ 字号 评论关闭

 

        函数是结构化程序设计的产物,它使代码更加模块化,耦合性更低,重用性更高。不过,函数调用会带来额外的开销,除了引起跳转外,还会产生额外的指令。

        人都有这样的经验,做一件事情时,如果被人打断,重新再回来做这件事情,就需要一段恢复时间,如果老是被打断,那事情就没法做了。函数调用也是这样,要进行参数压栈出栈、寄存器保存、指令跳转等。多个步骤如果程序的性能要求较高,就可以将一些小的函数直接转换成代码。

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

 

抱歉!评论已关闭.