2010-09-06 66 views
9

許多數組邊界檢查會降低速度,這對2D數組尤爲重要。有沒有辦法在F#中編寫不安全的代碼塊?F#是否具有與C#的「不安全」塊等效的語法

+2

不是我每天都在做的事情,但F#允許你在代碼中編寫CLR文字,我敢打賭,有一種方法可以通過它來執行不安全的指針操作。 – Juliet 2010-09-06 15:44:38

回答

9

我不是F#程序員,但據我所知,它似乎沒有unsafe關鍵字。

通過將2D數組轉換爲一維數組,您可能會獲得性能提升。

忠告5:直到我們得到這個權利,我 會建議.NET用戶做什麼 許多C++程序員的數值做: 寫一個類來實現您的 n維數組。這將是 表示爲1維陣列, 和相關訪問器將 通過 適當的乘法將n個索引轉換爲1。我們 幾乎肯定不會消除 界限檢查一維數組, 但至少我們只會做一個檢查!

Array Bounds Check Elimination in the CLR

+0

您指出的MSDN文章使得讀起來非常有趣:-) – 2010-09-06 11:48:43

+0

我也這麼認爲,因爲它是關於CLR,它應該是語言不可知的。 – 2010-09-06 14:47:50

1

不是在這個版本,我懷疑他們會永遠添加它。

3

請參閱here以獲取編譯器爲您刪除邊界檢查的一些方法。基本上,您需要編寫循環,以便編譯器知道您的索引將處於邊界內。如果它知道它將處於邊界內,那麼當您在釋放模式下運行而不進行調試時,JIT編譯器將爲您移除邊界檢查。

相關問題