编写高效代码(7) 减少函数调用——不要老打断我
2012-12-17 23:02
246 查看
函数是结构化程序设计的产物,它使代码更加模块化,耦合性更低,重用性更高。不过,函数调用会带来额外的开销,除了引起跳转外,还会产生额外的指令。
人都有这样的经验,做一件事情时,如果被人打断,重新再回来做这件事情,就需要一段恢复时间,如果老是被打断,那事情就没法做了。函数调用也是这样,要进行参数压栈出栈、寄存器保存、指令跳转等。多个步骤如果程序的性能要求较高,就可以将一些小的函数直接转换成代码。
[cpp]
view plaincopyprint?
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);
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;
本文节选自《大话处理器》第6章。
一台电脑要真正做到优秀,它的硬件和软件是必须紧密联系在一起的。——乔布斯
来源:http://blog.csdn.net/muxiqingyang/article/details/7043476
人都有这样的经验,做一件事情时,如果被人打断,重新再回来做这件事情,就需要一段恢复时间,如果老是被打断,那事情就没法做了。函数调用也是这样,要进行参数压栈出栈、寄存器保存、指令跳转等。多个步骤如果程序的性能要求较高,就可以将一些小的函数直接转换成代码。
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
相关文章推荐
- 编写高效代码(1) 减少函数调用——不要老打断我
- 编写高效代码(1) 减少函数调用——不要老打断我
- 连载:编写高效代码(7) 减少函数调用——不要老打断我
- 编写高效代码(9) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情
- 编写高效代码(3) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情
- 连载:编写高效代码(9) 减少处理器不擅长的操作——不要逼我做我不喜欢的事情
- 翻转子串 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。
- C语言宏定义##连接符和#符的使用(MFC就是靠##自动把消息和消息函数对应起来了,借助宏来减少switch case代码的编写量)
- 编写高效代码(11) 尽量减少分支
- 编写高效代码(5) 尽量减少分支
- sh函数极度建议不要递归调用,因为它很慢,看测试代码
- C++编程规范之31:不要编写依赖于函数参数求值顺序的代码
- 编写高质量代码——避免在构造析构函数中调用虚函数
- 连载:编写高效代码(11) 尽量减少分支
- 编写高效Lua代码的方法 - 4 - 减少,重用,回收
- 巧用STL中的绑定器和函数对象嵌套调用实现优雅高效的代码
- 条款05:了解C++默默编写并调用哪些函数
- c语言内部(汇编代码分析)函数调用过程探究
- 提高代码质量:如何编写函数
- 如何在Android上编写高效的Java代码