8.7 栈帧
栈帧也叫做过程活动记录,是编译器用来实现方法调用的一种数据结构。栈帧包含如下信息:
❑方法参数;
❑方法中的局部变量;
❑方法执行完后的返回地址;
❑获取文件中包含所执行代码的行号和列号;
❑获取包含所执行代码的文件名;
❑……
代码清单8-15 给出了栈帧示例:
代码清单8-15 栈帧示例
1 using System;
2 public class MethodSample
3{
4 public static void Main()
5{
6 MethodSample ms=new MethodSample();
7 ms.DoSomething1();
8}
9
10 public void DoSomething1()
11{
12 Console.WriteLine(“DoSomething1()被调用.”);
13 DoSomething2();
14}
15
16 public void DoSomething2()
17{
18 Console.WriteLine(“DoSomething2()被调用.”);
19}
20}
上述代码,有三个方法,分别是Main()、DoSomething1()、DoSomething2(),它们之间的调用关系如代码清单8-15所示,那么栈帧在托管栈中是什么情况呢?见图8-12。
图 8-12 栈帧示意图
图8-12表示了在方法调用时托管栈中的栈帧的情况,具体如下:
❑Main方法开始执行,此刻Main方法的栈帧入栈;
❑进入Main方法,开始调用DoSomething1方法,DoSomething1栈帧入栈;
❑进入DoSomething1方法,开始调用DoSomething2方法,DoSomething2栈帧入栈;
❑DoSomething2方法执行完毕,栈帧出栈;
❑DoSomething1方法执行完毕,栈帧出栈。