zoukankan      html  css  js  c++  java
  • C# (类型、对象、线程栈和托管堆)在运行时的相互关系

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

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

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

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

  • 相关阅读:
    onLoad和DomContentLoad的区别
    懒加载和预加载区别
    各大浏览器特点
    移动端适配
    清除浮动的方法
    rem的计算
    粗结MySql数据库基础知识点之一
    单例模式(饿汉式单例模式与懒汉式单例模式)
    关于ajax技术
    浅谈EL与JSTL
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/8018791.html
Copyright © 2011-2022 走看看