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.7 栈帧 - 图1

图 8-12 栈帧示意图

图8-12表示了在方法调用时托管栈中的栈帧的情况,具体如下:

❑Main方法开始执行,此刻Main方法的栈帧入栈;

❑进入Main方法,开始调用DoSomething1方法,DoSomething1栈帧入栈;

❑进入DoSomething1方法,开始调用DoSomething2方法,DoSomething2栈帧入栈;

❑DoSomething2方法执行完毕,栈帧出栈;

❑DoSomething1方法执行完毕,栈帧出栈。