您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C语言 >> 辅导 >> 正文    
  宏比函数实现在时间上的优越性探讨 【注册男护士专用博客】          

宏比函数实现在时间上的优越性探讨

www.nanhushi.com     佚名   不详 

在某些程序设计中,有些方法可以用函数来实现也可以用宏定义来实现.一般来说用宏定义的方法在时间上占有相当大的优势,在空间上有时也占一定的优势.这是因为函数在调用时,需要保护现场和恢复现场,所进行的压栈和出栈操作.此外,函数在调用时要形参分配临时空间,还要对实参和形参的传递等处理.而宏在程序中只是将它展开直接插入到程序段中,因此不需要像函数调用那样.因此宏定义节约了一定的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字节之间的差值.

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

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目