.NET Framework具有CLR(公共语言运行时),可以执行用.NET语言编写的代码。CLR管理内存需求,安全性,代码优化,特定于平台的转换等。在非托管代码的情况下,不存在CLR,并且代码由操作系统直接执行。
以下是托管代码和非托管代码之间的一些重要区别。
| 序号 | 键 | 托管代码 | 非托管代码 |
|---|---|---|---|
| 1 | 执行者 | 由CLR执行,公共语言运行时,也称为托管运行时环境。 | 由操作系统直接在基础硬件上执行。 |
| 2 | 安全 | CLR处理安全问题,并为.NET编写的代码提供内置的安全性。 | 没有内置的安全性。编写安全的代码是开发人员的责任。 |
| 3 | 内存溢出 | 内存缓冲区溢出永远不会发生,因为CLR自动处理内存分配和释放。 | 内存缓冲区溢出可能会发生,并可能严重妨碍程序执行。 |
| 4 | 运行时服务 | CLR提供自动垃圾收集,对托管代码的异常处理。 | 没有为非托管代码提供自动垃圾回收和其他服务。 |
| 5 | 输出结果 | 托管代码被转换为IL,中间语言也称为MSIL的CIL。 | 非托管代码将转换为母语代码。 |
| 6 | 低级别访问 | 程序员无法使用托管代码进行低级访问。 | 程序员可以使用非托管代码编写低级访问代码。 |