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