读书笔记四:4.4 运行时的托管堆,栈,类型,对象的相互联系(一)

运行时的托管堆,栈,类型,对象的相互联系(一)

1.       基础知识:

       Windows 应用程序启动的时候,他会在线程栈里面分配1M的空间,所谓线程栈:windows 应用程序最小的执行单位就是线程,线程是在栈里面执行的;比如程序执行以下代码:

                                      

 

 

 

Void M1()

{

   String name=”joe”;

   M2(name);

   ………

   Return ;

}

 

  

    线程栈  

…….

 String name

 Sname地址) 

 

 

 


当程序调用的时候,会执行一些 序幕代码:比如M1方法这个序幕代码进行一些初始化的操作,把一些局部变量比如 name 压入线程栈;也会执行一些 尾声 代码 对内存进行清理,返回调用者;

当程序执行到M1 调用M2方法的时候,会把name的地址压入线程栈,还会标记一个返回地址,标记程序执行完M2方法应该返回的地址;

 

Void M1()

{

   String name=”joe”;

   M2(name);

   ………

   Return ;

}

 

 

 

Void M2()

 {

     Int a;

     Int b;

      ….

     Return ;

}

 

 

…….

 String name

 Sname地址) 

返回地址

 Int a

Int b

………..

………

…….

………


当程序开始执行M2的时候,这个程序当然也会执行一些序幕代码;把 a, b 压入栈;然后执行M2方法体;当M2执行到return语句的时候;栈帧将展开,回到类似第一个图所示的图;所谓栈帧:就是当执行一个方法的时候会自动在栈中压入一个stackFrame,在stackFrame里面执行方法,当方法执行完毕的时候,栈帧将展开 我的理解就是擦拭;把栈帧擦掉,然后返回;当M1方法体执行完毕的时候他依然会返回,在栈中的string name ,s (返回地址) 什么的都会被弹出;

 

 

posted @ 2011-11-30 16:25  fox_ice  阅读(127)  评论(0)    收藏  举报