<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CLR</title>
	<atom:link href="https://www.aitaocui.cn/tag/208678/feed" rel="self" type="application/rss+xml" />
	<link>https://www.aitaocui.cn</link>
	<description>翡翠玉石爱好者聚集地</description>
	<lastBuildDate>Thu, 24 Nov 2022 13:18:08 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.aitaocui.cn/wp-content/uploads/2022/11/taocui.png</url>
	<title>CLR</title>
	<link>https://www.aitaocui.cn</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>CLR(计算机专业名词)</title>
		<link>https://www.aitaocui.cn/article/320074.html</link>
					<comments>https://www.aitaocui.cn/article/320074.html#respond</comments>
		
		<dc:creator><![CDATA[墨尔本机器]]></dc:creator>
		<pubDate>Thu, 24 Nov 2022 13:18:08 +0000</pubDate>
				<category><![CDATA[百科]]></category>
		<category><![CDATA[CLR]]></category>
		<guid isPermaLink="false">https://www.aitaocui.cn/?p=320074</guid>

					<description><![CDATA[CLR常用简写词语，CLR是公共语言运行库(Common Language Runtime)，和Java虚拟机一样也是一个运行时环境。它负责资源管理（内存分配和垃圾收集等），并保证...]]></description>
										<content:encoded><![CDATA[</p>
<article>
<p>CLR常用简写词语，CLR是公共语言运行库(Common Language Runtime)，和Java虚拟机一样也是一个运行时环境。它负责资源管理（内存分配和垃圾收集等），并保证应用和底层操作系统之间必要的分离。CLR存在两种不同的翻译名称：公共语言运行库和公共语言运行时。CLR将监视形形色色的常见编程错误，许多年来这些错误一直是软件故障的主要根源，其中包括：访问数组元素越界，访问未分配的内存空间，由于数据体积过大而导致的内存溢出，等等。CLR的核心功能包括：内存管理、程序集加载、安全性、异常处理和线程同步，可由面向CLR的所有语言使用。</p>
</article>
<article>
<h1>基本内容</h1>
<p>CLR(公共语言运行库,Common Language Runtime)和Java虚拟机一样也是一个运行时环境，是一个可由多种编程语言使用的运行环境。CLR的核心功能包括：内存管理、程序集加载、安全性、异常处理和线程同步，可由面向CLR的所有语言使用。并保证应用和底层操作系统之间必要的分离。CLR是.NET Framework的主要执行引擎。</p>
<p>为了提高平台的可靠性，以及为了达到面向事务的电子商务应用所要求的稳定性级别，CLR还要负责其他一些任务，比如监视程序的运行。按照.NET的说法，在CLR监视之下运行的程序属于“托管的”（managed）代码，而不在CLR之下、直接在裸机上运行的应用或者组件属于“非托管的”（unmanaged）的代码。</p>
<p>CLR将监视形形色色的常见编程错误，许多年来这些错误一直是软件故障的主要根源，其中包括：访问数组元素越界，访问未分配的内存空间，由于数据体积过大而导致的内存溢出，等等。</p>
<p>然而，这种对受管理代码的运行监视是有代价的。虽然当前还不可能精确地得到监视程序运行所需要的开销，但从当前Beta测试版的性能表现来看，正如Microsoft所承认的那样，我们可以预料由它导致的性能降低程度至少达到10%。当然，如果监视程序运行能够将稳定性和可用性提高到一个新的档次，那么，我们是否仍会怀疑这10%的性能降低是一件坏事？</p>
<p>在处理器性能改善方面，摩尔定律已经一再被证明是正确的。既然如此，我们要得到一台性能增加了10%的服务器要等待多长时间呢。</p>
<p>NET提供的公共语言运行库是一种多语言执行环境，支持众多的数据类型和语言特性。他管理着代码的执行，并使开发过程变得更加简单。这是一种可操控的执行环境，其功能通过编译器与其他工具共同展现。</p>
<p>依靠一种以运行时为目标的编译器开发的代码叫做可操控代码。</p>
<p>元数据：为了使运行时环境可以向可操控代码提供服务，语言编译器需要产生一种元数据，它将提供在使用语言中的类型、成员、引用的信息。运行时环境使用元数据定位并载入类，在内存中展开对象实例，解决方法调用，产生本地代码，强制执行安全性，并建立运行时环境的边界。</p>
<p>可操控执行的含义：对象在执行的过程中完全被运行时环境所控制。运行时环境提供以下服务:自动内存管理、调试支持、增强的安全性及与非可操控性代码的互操作性。条件：1、选择以运行时为目标的语言编译器，如VB、C#；2、在组件的输出类型中使用CLR要求的语言特性。</p>
<h1>集成能力</h1>
<p>跨语言集成的能力：CLR包含了一个丰富的语言特性集，保证了它与各种程序设计语言的兼容性。这一特性集即公用语言规范，稍后将对其进行详细说明。</p>
<h1>内存管理</h1>
<p>内存管理的自动化：在执行过程中管理应用程序的资源是一项单调而困难的工作。它会将你的注意力从你本应解决的问题中引开。而垃圾收集机制完全解决了程序员在编程过程中头痛的问题，跟踪内存的使用，并知道何时将它们释放。</p>
<p>在面向对象的环境中，每种类型都标识了对你的应用程序有用的某种资源。为了使用这些资源，你需要为类型分配内存。在应用中，访问一种资源要通过以下步骤：</p>
<p>（1）为类型分配内存。</p>
<p>（2）初始化内存，设置资源的初始状态并使其可用。</p>
<p>（3）通过访问该类型的实例成员来访问资源。</p>
<p>（4）卸下将被清除的资源状态。</p>
<p>（5）释放内存。</p>
<p>这一看似简单的过程在实际的编程中是产生错误的主要来源之一。更可怕的是：内存中的错误往往导致不可预见的结果。如果你有过编程的经验，想想看，有多少次你的程序因为内存访问错误而崩溃？特别是计算机存在多根内存条时特别容易内存报错死机。建议升级电脑时换掉原来的内存，不要采用加内存的方式。</p>
<p>CLR要求所有的资源从可操控的堆（注：在此指一种内存结构）中分配。当一个进程被初始化后，CLR保留了一个未被分配的地址空间。这一区域叫做可操控堆。在堆中保持了指向下一个将被分配给对象的堆地址的指针(NEXT)。</p>
<p>初始状态下，该指针是保留地址空间的基地址。一个应用使用新的操作产生对象。此操作首先检查新对象需要字节的大小是否会超出保留空间。如果对象大小合适，指向下一个地址的指针将指向堆中的这个对象，该对象的构造器被调用，新的操作返回对象的地址。</p>
<p>当一个应用请求建立一个对象时，地址空间可能不够大。堆将发现这一点（通过将新对象的大小与NEXT指针相加，并与堆的大小进行比较），这时垃圾收集器就将被调用。在这里，CLR引入了“代”的概念。代，指堆中对象产生的先后。这样，垃圾收集器在将发生溢出时回收属于特定的“代”的对象，而不是回收堆中的所有对象。</p>
<p>（6）即时编译</p>
<p>在各种语言的编译器对源代码进行编译之后，在CLR环境中产生的是中间代码（出于兼容性与跨语言集成的考虑），其内容虽然有效，但在转化为本地代码之前它本身是不可执行的。这就是JIT编译器需要完成的工作。</p>
<p>这里需要说明一个问题：为什么要即时编译，而不是一次性的将中间代码文件进行编译？答案很简单：原因在于效率。在大型的应用中，你很少会用到程序的全部功能，这种边执行边编译的措施比一次性的完全编译效率更高。</p>
<p>CLR带有三个不同的JIT编译器，在Windows平台中，CLR带有三个不同的JIT编译器：</p>
<p>（1）缺省的编译器&#8212;主编译器，由它进行数据流分析并输出经过优化的本地代码，所有的中间代码指令均可被它处理。</p>
<p>（2）PREJIT，它建立在主JIT编译器之上。其运行方式更象一个传统的编译器：每当一个.NET组件被安装时它就运行。</p>
<p>（3）ECONOJIT，在并不充分优化的前提下，它能够快速完成IL代码到本地码的转换，编译速度与运行速度都非常快。</p>
<p>为了配合编译器的工作，在.NET SDK的安装路径下的/bin目录中有一个负责管理JIT的应用程序：jitman.exe。具体的使用参见联机帮助。</p>
<h1>版本发布</h1>
<p>在当前以组件为基础的系统中，开发人员和用户对于软件版本和发布中存在的问题已经十分熟悉了。当我们安装一个新的应用之后，我们很可能发现原本正常的某个应用程序奇怪的停止了工作。绝大多数开发人员将时间花在了确保所有注册表入口的一致性，以便激活COM类上。这就是所谓的“DLL地狱”。</p>
<p>.NET平台通过使用集合来解决这一问题。在这里，“集合”是一个专有名词，指类型与资源的发布单元，在很大程度上它等同于今天的DLL。正象.NET用元数据描述类型一样，它也用元数据描述包含类型的集合。</p>
<p>通常说来，集合由四个部分组成：集合的元数据（集合的内部清单）、元数据描述的类型、实现类型的中间语言代码和一组资源。在一个集合中，以上四个部分并不是都必须存在，但是，集合中必须包含类型或资源，这样集合才有意义。</p>
<p>在.NET中一个基本的设计方针是使用孤立的组件。一个孤立的集合的含义是指一个集合只能被一个应用所访问。在一台机器上，它不被多个应用共享，也不会受其它应用程序对系统的更改的影响。“孤立”赋予了开发人员在自己的程序中对代码的完全控制权。</p>
<p>任何共享代码都需要被明确地标识。同时，.NET框架也支持共享集合的概念。一个共享集合指在一台机器上被多个应用共享的集合。共享集合需要严格地命名规定。</p>
<p>有了.NET，应用程序间的共享代码是明确定义的。共享集合需要一些额外的规则来避免我们今天遇到的共享冲突问题。共享代码必须有一个全局唯一的名称，系统必须提供名称保护，并在每当引用共享集合时，CLR将对版本信息进行检查。</p>
<h1>汇编指令</h1>
<p>51单片机 汇编 指令CLR：</p>
<h2 id="a-2d0e1aad">CLRA</h2>
<p>//累加器A 被赋零值，此时为逻辑运算指令。</p>
<h2 id="a-3d5c2c1e">CLRC</h2>
<p>//程序状态寄存器PSW中的CY位状态清零，此时为位操作指令。</p>
</article>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
<div class="mt-3 mb-3" style="max-width: 770px;height: auto;">
                                    </div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.aitaocui.cn/article/320074.html/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
