dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>C/C++技术资料>文章内容
宏比函数实现在时间上的优越性探讨
来源: 作者:

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  http://www.bc-cn.net
*/ 作者: neverTheSame    E-mail:zhaoxufeng9997@126.com    QQ:475818502
*/ 时间: 2007-11-1  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


在某些程序设计中,有些方法可以用函数来实现也可以用宏定义来实现.
一般来说用宏定义的方法在时间上占有相当大的优势,在空间上有时也占一定的优势.
这是因为函数在调用时,需要保护现场和恢复现场,所进行的压栈和出栈操作.
此外,函数在调用时要形参分配临时空间,还要对实参和形参的传递等处理.
而宏在程序中只是将它展开直接插入到程序段中,因此不需要像函数调用那样.
因此宏定义节约了一定的CPU处理时间.
下面给出二个例子,就能更形象说明问题了.
例子一:用函数实现.
#include<time.h>
int GETMAX(int x,int y,int z)
{
    return (x>=y?x:y)>z?(x>y?x:y):z;
}
int tGETMAX(int x,int y,int z,int m,int n,int p)
{
    return GETMAX(x,y,z)>=GETMAX(m,n,p)?GETMAX(x,y,z):GETMAX(m,n,p);
}
int main(void)
{
    time_t start,end;
    long i;
    clrscr();
    start=clock();
    for(i=0;i<10000000;i++)
        tGETMAX(1,2,3,4,5,6);
    end=clock();
    printf("%lf",(double)(end-start)/CLK_TCK);
    getch();
}
执行时间:1.373626秒
可执行文件大小:29,938字节

例子二:用宏实现.
#include<stdio.h>
#include<conio.h>
#include<time.h>
#define GETMAX(X,Y,Z) ((X>=Y?X:Y)>=Z?(X>Y?X:Y):Z)
#define tGETMAX(X,Y,Z,M,N,P) \ /*由于一行不好写,所以将其写到第二行,但要加一个'\'作标记*/
(GETMAX(X,Y,Z)>=GETMAX(M,N,P)?GETMAX(X,Y,Z):GETMAX(M,N,P))
int main(void)
{
    time_t start,end;
    long i;
    clrscr();
    start=clock();
    for(i=0;i<10000000;i++)
        tGETMAX(1,2,3,4,5,6);
    end=clock();
    printf("%lf",(double)(end-start)/CLK_TCK);
    getch();
}
执行时间:0.054945秒
可执行文件大小:29,497字节

由于上面二个例子可见:在时间上1.373626秒与0.054945秒之间的差值.
在空间上29,938字节与29,497字节之间的差值.

这里需要注意的是,使用宏来实现在空间上的优势只当宏使用得很少.
但当宏使用得多空间效率就没有用函数来实现的好.


上一篇:爱因斯坦难题的C语言程序设计   下一篇:用地址替代变量的讨论
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言数组排序小结
·Python 与 C++ 程序的简单实例对
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
·C++初学者应该关心的优秀图书一
·利用C语言小程序来解决大问题
·用C语言写PHP扩展的步骤
·用C语言扩展PHP功能
  相关文章
·爱因斯坦难题的C语言程序设计
·用地址替代变量的讨论
·对const使用的理解
·M个人,1到N报数出列问题
·浅谈递归机制和非递归转换
·函数的可变参数详谈
·输入一行字符 统计字符 C语言
·C语言实现 恺撒加密法
·斐波那挈数列 C语言实现
·求最大数函数
·二维数组打印菱形 C语言
·static变量举例
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763