[英]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://msdn.microsoft.com/en-us/library/aa664769%28v=VS.71%29.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.