CLR整理

本文深入探讨了.NET公共语言运行时(CLR)的工作原理,包括托管执行过程、自动内存管理和垃圾回收机制。介绍了从源代码编译为MSIL,再到JIT编译或NGen.exe预编译为本机代码的过程。详细阐述了内存分配,特别是托管堆的运作,以及如何处理对象引用、内存对齐和类型对象。此外,还讨论了垃圾回收的代际策略,以及如何处理非托管资源。最后提出了几个关于.NET托管堆结构和管理的问题。
摘要由CSDN通过智能技术生成

CLR 公共语言运行时
托管执行过程
1.选择编译器
   .net中包括c#,vb,vc++等,选择合适编译器
2.编译为 MSIL
    编译器将源代码转换为 Microsoft 中间语言 (MSIL)  和计算机系统结构有关
3.将 MSIL 编译为本机代码
    根据本机结构编译为本机代码:
     方法1:.net提供.net实时(JIT)编译器 :按需编译代码,边运行边编译,性能会有略微影响;
     方法2:使用 NGen.exe 的安装时代码生成:预编译,在运行前将整个程序集编译,存储;
4.代码验证
     确认代码是否有权访问内存位置;
5.运行代码
    JIT编译:编译运行,编译过的方法,不用再编译,可直接使用;
    NGen.exe编译:将存储的映像中的入口点作为运行时的入口点,开始运行;
自动内存管理
在运行时管理内存的分配和释放:帮助处理常见内存问题,如:忘记释放对象导致内存泄露、尝试访问已释放对象的内存等;
1.分配内存
初始化时,在内存中保留一个连续的地址空间区域(最初时虚拟内存,并没有对应的物理内存),为托管堆,托管堆中有一个指针最初指向托管堆的基址,每存入对象后根据存入对象的地址和存入对象的长度,更新这个指针使之一直指向下一个可用地址;托管堆将进程隔离,进程之间不会互相访问相同地址;在托管堆中, 连续分配的对象可以确保它们在内存中是连续的。托管堆做了一个相当大胆的假设一地址空间和存储是无限的。这个假设显然是荒谬的。托管堆必须通过某种机制来允许它做这样的假设。这个机制就是垃圾回收器。后面讲述它的工作原理 。
在新建对象时,值类型根据类型字节数分配内存字节数,如int分配4个;引用类型内存分配包括两部分,指针占4个字节,内容是地址或者null,引用类型内容占实际需要字节数加上4字节(32位)方法表指针,4字节(32位)同步索引块,在64位机器上方法表指针和同步所以块各占8位;
引用类型一般被如下的对象引用:
● 栈上的一个变量(最常见的情况)。
● P/Invoke 情形下的句柄表。
● Finalizer queue,即终结队列。
● 寄存器。
如创建下面的User对象需要内存:
public class User
{
    public int Age { get; set; }
    public string Name { get; set; }

public string _Name = “123” + “abc”;
    public List _Names;
    public string GetName()
    { 
        Name = _Name;
      return Name;
    }
}
属性Age值类型Int,4字节;
属性Name,引用类型,初始为NULL,4个字节,指向空地址;
字段_Name初始赋值了,代码会被编译器优化为_Name

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值