簡體   English   中英

C#中的不安全代碼和非托管代碼有什么區別?

[英]What is difference between unsafe code and unmanaged code in 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的可驗證子集之外的代碼

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM