.NET中托管和非托管代码之间的区别

.NET Framework具有CLR(公共语言运行时),可以执行用.NET语言编写的代码。CLR管理内存需求,安全性,代码优化,特定于平台的转换等。在非托管代码的情况下,不存在CLR,并且代码由操作系统直接执行。

以下是托管代码和非托管代码之间的一些重要区别。

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