2011-11-11 104 views
4

我正在閱讀有關託管代碼中的內存泄漏,並想知道是否有可能在C#不安全的代碼中創建它?是不安全的C#垃圾收集

unsafe 
{ 
    while(true) new int; 
} 

我不確定這是否會被GC捕獲,如果這是作爲不安全的代碼運行?

感謝

+4

我喜歡在代碼段的每一個關鍵字是如何突出的藍色圓形的代碼。 – BoltClock

+3

這不會編譯;它缺少括號。另外,'int'是一個不好的例子,因爲它是一個值類型。 – SLaks

+1

+1這似乎是一個合理的問題。爲什麼倒票? – Daryl

回答

10

unsafe關鍵字只允許你使用不安全的代碼(指針)。

它根本不會改變普通代碼的語義。

5

IMO不安全只允許在內存中使用指針類型和proform C++風格指針操作。但要告訴垃圾收集器不要碰我的代碼,用修復聲明。

C#支持通過代碼塊內的指針進行直接內存操作,該代碼塊標記爲 不安全並使用/ unsafe編譯器選項進行編譯。

固定語句被用來告訴垃圾收集器別碰與固定聲明

unsafe 
    { 
     fixed (int* a = &b) // tells garbage collector not touch 
     { 
     *a = 9; 
     }  
    } 
+0

對啊,這真的很有幫助,謝謝。 +1 –