.NET:栈的生长与消亡.
.NET:栈的生长与消亡
背景
多数情况下我们不需要关心栈的变化,不过个别场景下还是需要对此有所了解,如:指针操作,下文会给出一个具体的示例。另外,理解栈的变化对于理解作用域也有一定的好处,因为C#的局部变量作用域是基于栈的。
栈的变化规则 方法调用会导致栈的生长,具体包括两个步骤:一、插入方法返回地址(下图中的Fn:);二、将实际参数按值(可以使用ref或out修饰)拷贝并插入到栈中(可以使用虚参数访问)。 遇到局部变量定义会向栈中插入局部变量。 遇到return语句会导致栈消亡,一直消亡到方法返回地址,并把return的返回值设置到方法返回地址中。 这里先不考虑中括号导致的栈的消亡。
简单的示例
最后的小测试,输出的啥内容?
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace StackAndHeapStudy
8 {
9 unsafe class Program
10 {
11 static void Main( string [] args)
12 {
13 var test = new TestClass();
14 SetX(test);
15 Console.WriteLine(* test.X);
16 Console.WriteLine(* test.X);
17 }
18
19 private static void SetX(TestClass test)
20 {
21 var X = 10 ;
22
23 test.X = & X;
24 }
25 }
26
27 unsafe class TestClass
28 {
29 public int * X;
30 }
31 }
备注
上大学期间学习过C++和C,此文只是靠回忆而写的,不一定正确,也希望兄弟们多批评。
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did45345