C# 內在管理與指針日記

checked關鍵字:

      checked 關鍵字用於對整型算術運算和轉換顯式啓用溢出檢查。 

       默認情況下,如果表達式產生的值超出了目標類型的範圍,則常數表達式將導致編譯時錯誤,而非常數表達式在運行時計算並將引發異常。不過,如果通過編譯器選項或環境配置在全局範圍內取消了溢出檢查,則可以使用 checked 關鍵字來啓用此項功能。

      要注意,checked關鍵字不能用於涉及指針的轉換。對於這種轉換,即使在設置checked的情況下,發生溢出時也不會拋出異常.


類成員指針:

不能創建指向類的指針,這是因爲垃圾回收器不維護關於指針的任何信息,只維護關於引用的信息,因此創建指向類的指針會使垃圾回收器不能正常工作。在垃圾回收的過程中,垃圾回收器會把Object移動到內存的一個新單元上,這樣就會導致指向錯誤的存
儲地址。由於存在這個問題,因此編譯器不允許以這種方式把託管類型的成員的地址分配給指針。

解決這個問題的方法是使用fixed關鍵字,它會告訴垃圾回收器,可能有引用某些對象的成員
的指針,所以這些實例不能移動。如果要聲明一個指針,則使用fixed的語法如下所示:
Myclass Myobject = new Myclass();

fixed(long * pObject = &(Myobject.x))

{

   //do something

}
在關鍵字fixed後面的圓括號中,定義和初始化指針變量.


創建基於棧的數組:

爲了創建一個高性能的數組,需要使用另一個關鍵字:stackalloc。stackalloc命令指示.NET運
行庫在棧上分配一定量的內存。在調用stackalloc命令時,需要爲它提供兩條信息:
● 要存儲的數據類型
● 需要存儲的數據項數
例如,要分配足夠的內存,以存儲10個decimal數據項,可以編寫下面的代碼:
decimal * pDecimals = stackalloc decimal [10];


stackalloc返回的指針,stackalloc總是返回分配數據類型的指針,它指向新分配內存塊的頂部。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章