C# (类型、对象、线程栈和托管堆)在运行时的相互关系
2017-12-10 23:30
302 查看
在介绍运行时的关系之前,先从一些计算机基础只是入手,如下图:
该图展示了已加载CLR的一个windows进程,该进程可能有多个线程,线程创建时会分配到1MB的栈空间.栈空间用于向方法传递实参,方法定义的局部变量也在实参上,上图的右侧展示了线程的栈内存,栈从高位内存地址向地位内存地址构建.图中线程已经执行了一些代码,栈中已经存在了一些数据(图中阴影部分),现在假定线程执行的代码要调用M1方法.
简单的方法执行前运行时会先执行"序幕"代码,在方法开始前对其进行初始化,然后会执行"尾声"代码,在方法做完工作后对其进行清理,以便返回至其调用者.M1方法开始执行时,它的"序幕"代码在线程栈上分配局部变量的name的内存.如下图所示:
然后M1方法调用M2方法,将局部变量name作为实参传递。这造成name局部变量的地址被压入栈
该图展示了已加载CLR的一个windows进程,该进程可能有多个线程,线程创建时会分配到1MB的栈空间.栈空间用于向方法传递实参,方法定义的局部变量也在实参上,上图的右侧展示了线程的栈内存,栈从高位内存地址向地位内存地址构建.图中线程已经执行了一些代码,栈中已经存在了一些数据(图中阴影部分),现在假定线程执行的代码要调用M1方法.
简单的方法执行前运行时会先执行"序幕"代码,在方法开始前对其进行初始化,然后会执行"尾声"代码,在方法做完工作后对其进行清理,以便返回至其调用者.M1方法开始执行时,它的"序幕"代码在线程栈上分配局部变量的name的内存.如下图所示:
然后M1方法调用M2方法,将局部变量name作为实参传递。这造成name局部变量的地址被压入栈
相关文章推荐
- 类型,对象,线程栈和托管堆在运行时的相互关系(二)。
- 类型,对象,线程栈和托管堆在运行时的相互关系(二)。
- Sql2012如何将远程服务器数据库及表、表结构、表数据导入本地数据库 自定义日志记录功能,按日记录,很方便 C#常量和字段以及各种方法的语法总结 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法 asp.net webapi 自定义身份验证
- 运行时的相互联系(PE、Windows 加载器、应用程序域、程序集清单、元数据、类型、对象、线程栈、托管堆)
- 十:类型、对象、线程堆栈、托管堆栈之间运行时的相互关系(二)
- 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法
- [读书心得] .NET中 类型,对象,线程栈,托管堆在运行时的关系
- C#类型、对象、线程栈、托管堆在CLR中的关系
- [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
- 类型,对象,线程栈和托管堆在运行时的相互关系(一)。
- [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系
- 类型,对象,线程栈和托管堆在运行时的相互关系(一)。
- 类型、对象、线程栈和托管堆在运行时的相互关系
- C# 类型、对象、方法执行时的相互关系的一点思考
- 类型,对象,线程栈和托管堆在运行时的相互关系
- .Net 类型、对象、线程栈、托管堆运行时的相互关系
- 【.Net基础一】 类型、对象、线程栈、托管堆运行时的相互关系
- UML:UMLl类图符号 对象与类之间相互关系的类型包括:依赖、关联、聚合、组合、泛华、实现等。
- C#运行时相互关系浅析
- 一道理解c#中对象(引用类型)相互赋值和方法覆盖(overriding)的题目