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

时间:2010-09-22 15:44:20

标签: c# .net

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

5 个答案:

答案 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函数将不受管理。)

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

答案 4 :(得分:0)

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

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