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

 

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

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

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

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值