unsafe,fixed與GCHandle

1.unsafe安全

爲了保持類型安全,默認狀況下,C# 不支持指針運算。ide

在公共語言運行庫 (CLR) 中,不安全代碼是指沒法驗證的代碼。C# 中的不安全代碼不必定是危險的,只是其安全性沒法由 CLR 進行驗證的代碼。所以,CLR 只對在徹底受信任的程序集中的不安全代碼執行操做。若是使用不安全代碼,由您負責確保您的代碼不會引發安全風險或指針錯誤.ui

unsafe 關鍵字表示不安全上下文,該上下文是任何涉及指針的操做所必需的。spa

能夠在 類型或成員,塊內 聲明中使用 unsafe 修飾符指針

若要編譯不安全代碼,必須指定 /unsafe 編譯器選項。 沒法經過公共語言運行時驗證不安全代碼。code

 

static void Main(string[] args)
        {
            unsafe
            {
                int* i; //指向int的指針
                int** j;//指向int指針的指針
                int x = 1;
                i = &x;  //指向x
                j = &i;

                Console.WriteLine("x地址:{0}",(int)i);
                Console.WriteLine("指針i的地址:{0}", (int)j);
                Console.WriteLine("i指向的值:{0}",*i);
                Console.WriteLine("j指向的最終值:{0}", **j);
            }
            Console.Read();
        }

 

 

 

http://msdn.microsoft.com/zh-cn/library/t2yzs44b(v=vs.80).aspx對象

2.fixedblog

http://hi.baidu.com/jiang_yy_jiang/item/d0a162f12f4df6c0a835a2d3內存

3.GCHandle:提供用於從非託管內存訪問託管對象的方法ci

 

Test t=new Test();
GCHandle hander = GCHandle.Alloc(t);
var pin = GCHandle.ToIntPtr(hander);
相關文章
相關標籤/搜索