好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

.NET:栈的生长与消亡.

.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://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于.NET:栈的生长与消亡.的详细内容...

  阅读:45次