1. 程式人生 > >.Net中unsafe程式設計詳解

.Net中unsafe程式設計詳解

以c#為例。

一,開啟unsafe程式設計開關

   工程中預設的配置是不支援程式碼的非安全性的,所以第一次使用你得:

      解決方案管理器→→Properties→→生成選項卡→→允許不安全程式碼。

二,何時要用unsafe

1.一個原則

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

2.什麼時候用指標

    msdn裡說 “在 C# 中很少需要使用指標,但仍有一些需要使用的情況。例如,在下列情況中使用允許採用指標的不安全上下文是正確的: 處理磁碟上的現有結構, 涉及內部包含指標的結構的高階COM或平臺呼叫方案, 效能關鍵程式碼”

  • Dealing with existing structures on disk
  • Advanced COM or Platform Invoke scenarios that involve structures with pointers in them
  • Performance-critical code

   總之,一條判斷標準:當你使用C/C++能給帶給你的利大於弊時都可以使用unsafe程式設計。

三,unsafe的使用方法(幾個例子)

1.unsafe一個方法體

2.unsafe一段程式碼

3.網上找的一個較大unsafe例子

四,使用unsafe時可能用到的fixed

   1.為什麼要用fixed

       Unsafe的程式碼託管程式碼 (managed code)和非託管程式碼(Unmanaged Code)之間,它也是在CLR的環境中執行,但是可以用來直接操作記憶體。但由於程式碼是在CLR下託管執行,為了減少記憶體碎片C#的自動垃圾回收機制會允許已經分配的記憶體在執行時進行位置調整,所以如果我們多次呼叫的話就可能 導致指標指向其他的變數。比如*pInt為指向一個變數的地址為1001,CLR在重新記憶體整理分配後該變數就儲存在地址為5001的地方。而原來1001的地方可能會被分配其他變數,要解決這個問題我們就需要使用Fixed關鍵字。

   2.使用fixed的例子

      fixed 語句禁止垃圾回收器重定位可移動的變數。fixed 語句只能出現在不安全的上下文中。Fixed 還可用於建立固定大小的緩衝區。

五,參考

---------全文完 ------