托管和非托管是微软.net framework框架中特有的概念。
.net framework主要包括两部分:
1.CLR(Common Language Runtime)公共语言运行时。
2.BCL(Basic Class Library)基础类库。
CLR提供服务:诸如内存管理,垃圾回收,线程管理等服务;BCL提供实现。
托管代码:
运行在CLR下的代码就是托管代码,诸如C#、VB.NET 写的代码都会先编译成MSIL(MS中间代码),并运行在CLR的子集CLI(Common Language Infrastructure)中,最终根据不同的平台使用JIT(just in Time)编译成机器代码。
与Java机制不同在于Java是经过一次编译和一次解释运行,C#是经过两次编译运行。
非托管代码:
非托管的代码也叫本地代码(native),是由操作系统管理的。
高级语言编写的程序必须经过一定的步骤编译为机器语言才能被机器理解和运行。
在标准的C/C++中,编译过程是这样的:
1.预处理。源代码经过预处理器,对头文件和宏进行解析。
2.编译。经过编译器,生成汇编代码。
3.汇编。经过汇编器,生成机器指令。
4.链接。经过链接,生成可执行程序。
这种编译的特点是直接生成了机器码,可以直接被机器识别和运行,无需任何中间运行环境。缺点是不同平台能够识别的机器码不同,因此可执行程序的跨平台能力差。