什么是托管代码?
- 为获得托管运行时环境执行服务而编写的代码,如 .NET Framework 中的 CLR(公共语言运行时),称为托管代码。它始终由托管运行时环境实现,而不是由操作系统直接执行。
使用托管代码有哪些优势?
- 它提高了应用程序的安全性,就像当您使用运行时环境时,它会自动检查内存缓冲区以防止缓冲区溢出。
- 它自动实现垃圾收集。
- 它还提供运行时类型检查/动态类型检查。
- 它还提供引用检查,这意味着它检查引用是否指向有效对象,并检查它们是否重复。
托管代码的缺点是什么?
- 托管语言的主要缺点是不允许您直接分配内存,或者您无法获得 CPU 架构的低级访问权限。
什么是非托管代码?
- 由操作系统直接执行的代码称为非托管代码。 它始终针对处理器架构并依赖于计算机架构
使用非托管代码有什么优势?
- 它提供对程序的低级访问。
- 它还提供对硬件的直接访问。
- 它允许程序员绕过托管代码框架使用的一些参数和限制。
非托管代码的缺点是什么?
- 它不为应用程序提供安全性。
- 由于对内存分配的访问,与内存相关的问题会发生,例如内存缓冲区溢出等。
- 错误和异常也由程序员处理。
- 它不关注垃圾收集。
对比
Managed Code | Unmanaged Code |
---|---|
It is executed by managed runtime environment or managed by the CLR. | It is executed directly by the operating system. |
It provides security to the application written in .NET Framework. | It does not provide any security to the application. |
Memory buffer overflow does not occur. | Memory buffer overflow may occur. |
It provide runtime services like Garbage Collection, exception handling, etc. | It does not provide runtime services like Garbage Collection, exception handling, etc. |
The source code is compiled in the intermediate language known as IL or MSIL or CIL. | The source code directly compiles into native languages. |
It does not provide low-level access to the programmer. | It provide low-level access to the programmer. |