C# (类型、对象、线程栈和托管堆)在运行时的相互关系
2024-10-11 09:39:49
在介绍运行时的关系之前,先从一些计算机基础只是入手,如下图:
该图展示了已加载CLR的一个windows进程,该进程可能有多个线程,线程创建时会分配到1MB的栈空间.栈空间用于向方法传递实参,方法定义的局部变量也在实参上,上图的右侧展示了线程的栈内存,栈从高位内存地址向地位内存地址构建.图中线程已经执行了一些代码,栈中已经存在了一些数据(图中阴影部分),现在假定线程执行的代码要调用M1方法.
简单的方法执行前运行时会先执行"序幕"代码,在方法开始前对其进行初始化,然后会执行"尾声"代码,在方法做完工作后对其进行清理,以便返回至其调用者.M1方法开始执行时,它的"序幕"代码在线程栈上分配局部变量的name的内存.如下图所示:
然后M1方法调用M2方法,将局部变量name作为实参传递。这造成name局部变量的地址被压入栈
最新文章
- Shiro权限控制框架
- Storm实时计算框架的编程模式
- jQuery 有条件排序
- 第五十六节,python实现支持并发、断点续传的Ftp程序
- Input file 文本框美化
- 在Windows的DOS中运行java编程中的问题
- memcached 详解
- 【Python 08】汇率兑换2.0-1(字符串索引)
- 回声TCP服务器端/客户端
- ReactiveX 学习笔记(18)使用 RxJS + Angular 调用 REST API
- HttpInvokerUtils
- ubuntu 14.04 安装 openvswitch
- 洛谷P2597 [ZJOI2012] 灾难 [拓扑排序,LCA]
- CAS连接微软活动目录的配置方法
- __all__的作用
- 实践作业3:白盒测试----总结与反思DAY12.
- 实验三 敏捷开发与XP实践实验报告
- cpu gpu数据同步
- 阿里云RDS(云数据库)之产品简介
- 异构数据库迁移——DATAX