函数调用与系统保存状态

作者在 2008-09-06 22:35:47 发布以下内容
   我们来讨论一下系统是怎么调用一个函数的。先看一个例子。

1   void funa(int ,int)
2   void funb(int)
3
4   void main()
5   {
6   int a=10,int b=20;
7   funa(a,b);
8
9   void funa(int aa,int bb)
10  {
11 int n=5;
12 ...
13 ...
14 funb(n);
15  }
16  void funb(int s)
17  {
18 int x;
19 ...
20 ...
21  }


系统首先调用主函数main,保存当前的操作系统的运行状态,再保存函数main的反回值(返回值的地址),最后保存main的参数。(main是可以有参数的,此例没有)运行到6时,保存a和b的值。当运行到funa(a,b)时,调用funa(a,b)并给funa(a,b)分配空间。首先保存调用函数的运行状态,也就是main的运行状态,接着保存funa的反回地址,也就是第7行funa(a,b)的地址(位置),再下来就为funa的形式参数aa与bb分配空间,并给他们赋值aa=10 bb=20,最后运行funa的函数体,接着给局部变量n分配空间并赋值n=5,.......同理调用函数funb(n)并给funb分配空间,保存当前运行状态,也就是子函数funa的运行状态,再保存其反回地址,也就是第14行的funb(n),接着给形式参数s分配空间,并赋值s=5,接着运行子函数funb,首先给局部变量x分配空间,.......最后运行下去。当把所有的子函数都调用完了就要释放空间。首先反回到第14行的funb,运行funb的保存状态,再返回第7行的funa,并运行funa的保存状态,此时主函数运行结束,返回其值到当时保存的地址,再运行系统所保存的运行状态。所有程序运行完毕。

这个图片应放在程序的右边的,可是我不会那样编辑, 只能这样了,如果有哪位可以帮忙的话就太感谢了!
 

默认分类 | 阅读 3718 次
文章评论,共0条
游客请输入验证码
浏览78527次