A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 段朝骞 中级黑马   /  2013-9-25 01:54  /  2418 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 段朝骞 于 2013-9-25 12:25 编辑

.net开发的程序首先交给.net framework,再经过CLR,最后才是操作系统
我认为.net framwork 是一个庞大的类库,那CLR是什么?在系统中存放在什么地方?

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

6 个回复

倒序浏览
  CLR(Common Language Runtime)是一个运行时环境.CLR的核心功能包括:内存管理、程序集加载、安全性、异常处理和线程同步,可由面向CLR的所有语言使用。
  看了你的问题,我去搜索理解了下,感觉也不是很难理解,像我们在VS敲代码时,编译后提示我们错误和编译后一些异常,比如超出数组界限,无法强制转换数据类型应该都是CLR在做的事情,还有程序运行时和运行后内存的分配,包括以后的线程.
  至于位置应该在应用程序和底层操作系统之间.

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
托管资源的管理可以由CLR来控制,例如程序中对象内存空间的分配和回收。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
CLR常用简写词语,CLR是公共语言运行时,Common Language Runtime)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离。

一、CLR(公共语言运行时,Common Language Runtime)和Java虚拟机一样也是一个运行时环境,是一个可由多种编程语言使用的运行环境。CLR的核心功能包括:内存管理、程序集加载、安全性、异常处理和线程同步,可由面向CLR的所有语言使用。并保证应用和底层操作系统之间必要的分离。CLR是.NET Framework的主要执行引擎。

二、CLR(公用语言运行时,Common Language Runtime)
NET提供了一个运行时环境,叫做公用语言运行时(Common Language Runtime),是一种多语言执行环境,支持众多的数据类型和语言特性。他管理着代码的执行,并使开发过程变得更加简单。这是一种可操控的执行环境,其功能通过编译器与其他工具共同展现。

内存管理:
在面向对象的环境中,每种类型都标识了对你的应用程序有用的某种资源。为了使用这些资源,你需要为类型分配内存。在应用中,访问一种资源要通过以下步骤:
(1)为类型分配内存。
(2)初始化内存,设置资源的初始状态并使其可用。
(3)通过访问该类型的实例成员来访问资源。
(4)卸下将被清除的资源状态。
(5)释放内存。

CLR要求所有的资源从可操控的堆(注:在此指一种内存结构)中分配。当一个进程被初始化后,CLR保留了一个未被分配的地址空间。这一区域叫做可操控堆。在堆中保持了指向下一个将被分配给对象的堆地址的指针(NEXT)。
初始状态下,该指针是保留地址空间的基地址。一个应用使用新的操作产生对象。此操作首先检查新对象需要字节的大小是否会超出保留空间。如果对象大小合适,指向下一个地址的指针将指向堆中的这个对象,该对象的构造器被调用,新的操作返回对象的地址。

评分

参与人数 1技术分 +1 收起 理由
haxyek + 1

查看全部评分

回复 使用道具 举报
谢谢大家了,明白了{:soso_e113:}
CLR就是.net的核心,.net framework是由CLR和.net类库组成的
源代码是先翻译成MSIL(中间语言)再由CLR进行托管执行
回复 使用道具 举报
.CLR
  .NET框架的核心组件是CLR,它在操作系统的顶层并管理程序的执行。还提供下列的主要服务
  (1):自动垃圾收集。
  (2):安全和认证。
  (3):通过访问BCL得到广泛的编程功能。
回复 使用道具 举报
CIL被编译成本机代码并执行的原理:
  程序的CIL直到它被调用运行时才会被编译成本机代码。在运行时,CLR执行的步骤如下所示:
  (1)检查程序集的安全特性;
  (2)在内存中分配空间;
  (3)把程序集中的可执行代码发送给实时(Just-in-Time,JIT)编译器,把其中的一部分编译成本机代码。
  程序集中的可执行代码在需要的时候由JIT编译器编译,然后它就被缓存以备后来的程序中执行。使用这个方法意味着不被调用的代码不会被编译成本机代码,而且被调用的代码只被编译一次。
  一旦被编译成本机代码,CLR就在它运行时管理它,执行像释放无主内存、检查数组边界、检查参数类型和管理异常之类的任务,这产生两个重要的术语:
  a.托管代码:为.NET框架编写的代码称为托管代码,需要CLR。
  b.非托管代码:不在CLR控制下运行的代码。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马