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