C#中的不安全代码和非托管代码有什么区别?

C#中的不安全代码和非托管代码有什么区别?

托管代码在CLR(公共语言运行时)的监督下运行。 这对内存管理和垃圾收集等负责。

所以unmanaged只是在CLR的上下文之外运行。 不安全是一种“介于”管理和非管理之间。 不安全仍然在CLR下运行,但它可以让你直接通过指针访问内存。

C#中的不安全代码允许使用指针。 在CLR的上下文中,C#中没有非托管代码。

不安全的代码在CLR内部运行,而非托管代码在CLR外部运行。

不安全代码的一个例子是:

unsafe class MyClass { private int * intPtr; } 

您可以在此类的任何位置使用指针。

非托管代码的一个示例是:

 class MyClass { [DllImport("someUnmanagedDll.dll")] static extern int UnManagedCodeMethod(string msg, string title); public static void Main() { UnManagedCodeMethod("calling unmanaged code", "hi"); } } 

它不一定是非托管代码本身,而是调用它。

不安全 – 可能在MSIL的可validation子集之外的代码

Unmanaged – 不由运行时管理的代码,因此对GC不可见(例如,本机编译的x86函数将不受管理。)

来自: http : //forums.devx.com/archive/index.php/t-15405.html

以下是您在不安全的环境中可以做的事情。

http://msdn.microsoft.com/en-us/library/aa664769%28v=VS.71%29.aspx