CLR

CLR(Common Language Runtime):公共语言运行时,是一个可由多种编程语言使用的运行环境。CLR的核心功能包括:内存管理程序集加载、安全性、异常处理线程同步,可由面向CLR的所有语言使用。并保证应用和底层操作系统之间必要的分离。CLR是.NET Framework的主要执行引擎。按照.NET的说法,在CLR监视之下运行的程序属于“托管的”(managed)代码,而不在CLR之下、直接在裸机上运行的应用或者组件属于“非托管的”(unmanaged)的代码。

托管代码 (managed code)同受管制的代码

公共语言运行库环境(而不是直接由操作系统)执行的代码。托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收、运行库类型检查和安全支持等。这些服务帮助提供独立于平台和语言的、统一的托管代码应用程序行为。

托管代码的执行过程:
1、选择编译器:

为获得公共语言运行库提供的优点,必须使用一个或多个针对运行库的语言编译器,如 Visual Basic、C#、Visual C++、JScript 或许多第三方编译器(如 Eiffel、Perl 或 COBOL 编译器)中的某一个。

由于运行库是一个多语言执行环境,因此它支持各种数据类型和语言功能。您所用的语言编译器确定可用的运行库功能,而您使用这些功能设计代码。编译器(而不 是运行库)建立代码必须使用的语法。如果您的组件必须完全能够被用其他语言编写的组件使用,您的组件的导出类型必须只公开公共语言规范 (CLS) 中包括的语言功能。

2、编译,将源代码翻译为microsoft中间语言(MSIL)并生成所需的元数据。

3、在执行时,实时 (JIT) 编译器将 MSIL 翻译为本机代码。在此编译过程中,代码必须通过验证过程,该过程检查 MSIL 和元数据以查看是否可以将代码确定为类型安全。

4、运行代码:公共语言运行库提供使执行能够发生以及可在执行期间使用的各种服务的结构

非托管代码(Unmanaged Code) ,它是在公共语言运行库环境的外部,由操作系统直接执行的代码。非托管代码必须提供自己的垃圾回收、类型检查、安全支持等服务;它与托管代码不同,后者从公共语言运行库中获得这些服务。

使用vs如果一个解决方案中有c#项目也有c++项目,可以设置项目属性中调试下的 启用非托管代码调试 来对c++代码进行调试。

原文地址:https://www.cnblogs.com/nygfcn1234/p/3300735.html