读书笔记四:4.4 运行时的托管堆,栈,类型,对象的相互联系(一)
1. 基础知识:
当Windows 应用程序启动的时候,他会在线程栈里面分配1M的空间,所谓线程栈:windows 应用程序最小的执行单位就是线程,线程是在栈里面执行的;比如程序执行以下代码:
|
Void M1() { String name=”joe”; M2(name); ……… Return ; }
|
线程栈
|
当程序调用的时候,会执行一些 序幕代码:比如M1方法这个序幕代码进行一些初始化的操作,把一些局部变量比如 name 压入线程栈;也会执行一些 尾声 代码 对内存进行清理,返回调用者;
当程序执行到M1 调用M2方法的时候,会把name的地址压入线程栈,还会标记一个返回地址,标记程序执行完M2方法应该返回的地址;
|
|
|
当程序开始执行M2的时候,这个程序当然也会执行一些序幕代码;把 a, b 压入栈;然后执行M2方法体;当M2执行到return语句的时候;栈帧将展开,回到类似第一个图所示的图;所谓栈帧:就是当执行一个方法的时候会自动在栈中压入一个stackFrame,在stackFrame里面执行方法,当方法执行完毕的时候,栈帧将展开 我的理解就是擦拭;把栈帧擦掉,然后返回;当M1方法体执行完毕的时候他依然会返回,在栈中的string name ,s (返回地址) 什么的都会被弹出;

浙公网安备 33010602011771号