在介绍运行时的关系之前,先从一些计算机基础只是入手,如下图:

该图展示了已加载CLR的一个windows进程,该进程可能有多个线程,线程创建时会分配到1MB的栈空间.栈空间用于向方法传递实参,方法定义的局部变量也在实参上,上图的右侧展示了线程的栈内存,栈从高位内存地址向地位内存地址构建.图中线程已经执行了一些代码,栈中已经存在了一些数据(图中阴影部分),现在假定线程执行的代码要调用M1方法.

简单的方法执行前运行时会先执行"序幕"代码,在方法开始前对其进行初始化,然后会执行"尾声"代码,在方法做完工作后对其进行清理,以便返回至其调用者.M1方法开始执行时,它的"序幕"代码在线程栈上分配局部变量的name的内存.如下图所示:

然后M1方法调用M2方法,将局部变量name作为实参传递。这造成name局部变量的地址被压入栈

转载于:https://www.cnblogs.com/GreenLeaves/p/8018791.html

C# (类型、对象、线程栈和托管堆)在运行时的相互关系相关推荐

  1. 类型,对象,线程栈和托管堆在运行时的相互关系(一)。

    当系统加载一个CLR的进程,进程里面可能有多个线程,这时候系统会给这个进程创建一个大小为1M的线程栈.这个线程栈用来存放方法调用的实参,和方法内部定义的局部变量.下图展示了一个线程栈的栈内存.线程栈的 ...

  2. [CLR via C#]4. 类型基础及类型、对象、栈和堆运行时的相互联系

    原文:[CLR via C#]4. 类型基础及类型.对象.栈和堆运行时的相互联系 CLR要求所有类型最终都要从System.Object派生.也就是所,下面的两个定义是完全相同的, //隐式派生自Sy ...

  3. new,is和as运算符解析及运行时类型,对象,线程堆栈,托管堆之间的联系

    CLR要求对象必须使用new运算符创建,在使用new运算符创建一个对象时具体都做了些什么呢? 1.计算所有定义的实例字段,所有的基类型包括System.Object需要分配的字节数. 每一个堆上的对象 ...

  4. .net知识和学习方法系列(十五)类型,对象,堆栈和托管堆

    1.          类型,对象,堆栈和托管堆 C#的类型和对象在应用计算机内存时,大体用到两种内存,一个叫堆栈,另一个叫托管堆,下面我们用直角长方形来代表堆栈,用圆角长方形来代表托管堆.   首先 ...

  5. 栈和托管堆/值类型和引用类型/强制类型转换/装箱和拆箱[C#]

    一.栈和托管堆 通用类型系统(CTS)区分两种基本类型:值类型和引用类型.它们之间的根本区别在于它们在内存中的存储方式..NET使用两种不同的物理内存块来存储数据-栈和托管堆.如下图所示:     值 ...

  6. 面性对象中栈内存和堆内存的理解

    栈和堆都是Java用来在RAM(随机只读存储器)中存放数据的地方,Java自动管理栈和堆,程序员不能直接地设置栈和堆. Java堆是运行时数据区,通过new关键字从中分配内存空间,在堆内存中产生的垃圾 ...

  7. struct对象可能分配在托管堆上吗

    struct对象可能被分配在托管堆上吗? --会的. 比如当对struct装箱的时候,就会被分配在托管堆上. 比如,让一个struct实现一个接口. public interface IReport ...

  8. java虚拟机栈帧_Java虚拟机,运行时栈帧结构

    业余生活要有意义,不要越轨.--华盛顿 引导语 "虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器. ...

  9. TJS2中对象的表示方法,其代表的运行时环境,与闭包的关系

    对一个对象实例调用(string)转换时,可能会看到这样的结果: (object 0x01AAD840:0x01A9EEC4) object到string的转换可以通过显式或隐式方式调用.这个转换在t ...

最新文章

  1. ConfigParser MissingSectionHeaderError: File contains no section headers.
  2. boost::geometry::strategy::distance::thomas用法的测试程序
  3. 支付系统整体设计:整体架构设计以及注意要点(三)
  4. NIO和BIO如何影响应用程序的设计-API调用
  5. qt种实现搜索栏功能
  6. MVVM下拉框绑定触发事件
  7. Spring boot 2.4开启静态资源缓存
  8. python list去重函数_Python基础中的集合,函数——06
  9. 西门子系列PLC教学视频资源1——S7-200和S7-200smart
  10. 简历模板百度网盘自取
  11. 转行python算法_转:Python:SMOTE算法
  12. 维度表和事实表的区别
  13. 仓储物流机器人:快仓、海柔创新“极速前进”
  14. 禁用win10触摸屏手势_怎样禁用、启用Win10平板边缘滑动手势
  15. 《Programming in Lua 3》读书笔记(十)
  16. 7-2 航空公司VIP客户查询 (20分)
  17. 好用的企业微信scrm系统有哪些?
  18. P85.2.(2)回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符序列是否是回文。(提示:将一半的字符入栈)(C语言描述)
  19. 计算机主板电杆,嵌入式主板的常见故障解决办法
  20. FIFO原理及其应用

热门文章

  1. dve 二维数组信号 显示波形_函数任意波形发生器价格
  2. python中如何调用类_python如何调用java类
  3. 福建2021高考厦门一中成绩查询,2021年福建厦门各高中中考分数线及录取时间结果查询安排...
  4. vim 有用命令-20190217
  5. rnn参数共享的原因之一
  6. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)
  7. linux文件系统挂载磁盘,linux – 无法挂载磁盘(VFS:找不到ext4文件系统)
  8. JAVA链表返回子表_基于java的链表反转
  9. 处理文件和文件夹的模块---os
  10. 天翼云从业认证(4.6)高并发场景上云实践