C#中的不安全代码与非托管代码有什么区别?
答案 0 :(得分:16)
托管代码在CLR(公共语言运行时)的监督下运行。这对内存管理和垃圾收集等负责。
所以unmanaged只是在CLR的上下文之外运行。不安全是一种“介于”管理和非管理之间。不安全仍然在CLR下运行,但它可以让你直接通过指针访问内存。
答案 1 :(得分:3)
C#中的不安全代码允许使用指针。在CLR的上下文中,C#中没有非托管代码。
答案 2 :(得分:2)
不安全代码在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");
}
}
它不一定是非托管代码本身,而是调用它。
答案 3 :(得分:0)
不安全 - 可能在MSIL的可验证子集之外的代码
Unmanaged - 不由运行时管理的代码,因此不可见 到GC(例如,本机编译的x86函数将不受管理。)
答案 4 :(得分:0)
以下是您在不安全的环境中可以做的事情。
http://msdn.microsoft.com/en-us/library/aa664769%28v=VS.71%29.aspx