您的位置:首页 > 编程语言

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

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

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

1.将小函数直接写成语句

        下面这个求最小值的函数,可以直接用函数的内容替换函数调用。 

[cpp]
view plaincopyprint?

int min(int a, int b)  
  
{  
  
   return  a<b? a: b;  
  
}  
  
c = min(a, b);  
  
//直接写为
  
  
c = a<b? a: b;  

int min(int a, int b)

{

return  a<b? a: b;

}

c = min(a, b);

//直接写为

c = a<b? a: b;

 

2.将小函数写成宏

         如果调用的地方很多,用函数调用的方式会显得代码简洁。一种即保持代码简洁又能减少函数调用的做法是将函数体声明为宏。 

[cpp]
view plaincopyprint?

#define min(a,b) ((a)<(b)) ? (a) : (b)
  
  
c = min(a,b);  

#define min(a,b) ((a)<(b)) ? (a) : (b)

c = min(a,b);

 

3.将函数声明为内联函数

        如果嫌改为宏的方法太麻烦,还有一种简单的方法,就是将函数声明为inline,编译器会自动用函数体覆盖函数调用。 

[cpp]
view plaincopyprint?

inline int min(int a, int b)  
  
{  
  
   return  a<b? a: b;  
  
}  
  
c = min(a, b);  
  
//编译器会将代码优化成
  
  
c = a<b? a: b;  

inline int min(int a, int b)

{

return  a<b? a: b;

}

c = min(a, b);

//编译器会将代码优化成

c = a<b? a: b;

        

          本文节选自《大话处理器》第6章。

         一台电脑要真正做到优秀,它的硬件和软件是必须紧密联系在一起的。——乔布斯

来源:http://blog.csdn.net/muxiqingyang/article/details/7043476
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐