我已經讀過很多次,對Haskell的懶惰評估有時會導致空間泄漏。什麼樣的代碼會導致空間泄漏?如何檢測它們?部分程序員可以採取哪些預防措施來避免它們?Haskell中的空間泄漏
18
A
回答
12
您可能會收到很多回答,這是我在嘗試執行「真實世界」應用程序時遇到的問題。 我正在使用多線程和一些MVars傳遞數據(MVar就像鎖共享內存)。我的典型模式是:
a <- takeMVar mvar
putMVar mvar (a + 1)
然後,只是有時候,當一個適當的條件下發生的事情我不喜歡的東西:
a <- takeMVar mvar
when (a > 10) ....
的問題是無功的內容基本上是(0 + 1 + 1 + 1 + ....)...對於像100k這樣的數字來說非常密集...這種類型的問題在我的代碼中非常普遍;不幸的是對於多線程應用程序來說,很容易發現這些問題。
檢測......我所做的是在開始產生關於內存消耗,啓動和停止不同的線程和尋找,如果內存佔用的穩定與否數據模式哈斯克爾...
4
我在大數據結構上進行遞歸時遇到了這個問題。內置的thunk太多,然後你得到一個空間泄漏。
在Haskell中,您需要不斷地意識到碰到空間泄漏的可能性。由於迭代不存在,基本上任何遞歸函數都有可能產生空間泄漏。
爲了避免此問題,請記住遞歸函數,或者以遞歸方式重寫它們。
相關問題
- 1. 動態Haskell中的空間泄漏
- 2. Haskell中Floyd-Warshall的性能 - 修復空間泄漏
- 3. 什麼是空間泄漏?
- 4. 測試Haskell函數是否存在空間泄漏
- 5. Haskell HDBC內存泄漏
- 6. Haskell HDBC-ODBC內存泄漏?
- 7. 懶惰的樹與空間泄漏
- 8. Control.Lens.Plated和Bound的空間泄漏/交互中的問題
- 9. 簡單字符串生成中的空間泄漏。爲什麼?
- 10. 代碼中的空間泄漏在哪裏?
- 11. XMLParser泄漏儀器泄漏
- 12. iPhone - UIImage泄漏,CGBitmapContextCreateImage泄漏
- 13. 內存泄漏,angularJS $間隔
- 14. javascript間隔內存泄漏
- 15. 間歇性內存泄漏
- 16. 創建NsMutableData期間泄漏
- 17. Haskell中的空間函數
- 18. iphone中的泄漏
- 19. NSURLConnection中的泄漏
- 20. 如何在java中查找非堆空間內存泄漏?
- 21. 的Android - IntentReceiver泄漏/漏水/泄露
- 22. ,因爲資源的內存Java堆空間問題的泄漏
- 23. 在檢查陣列中的空白空間時Java內存泄漏
- 24. 的jQuery 3.1.1內存泄漏和空
- 25. 空間泄漏,作家和總和(哦,我的!)
- 26. AdSense的JS代碼泄漏,廣告空間不工作
- 27. 哈斯克爾自下而上的DP空間泄漏
- 28. 視覺泄漏檢測器檢測新的空白MFC項目上的泄漏
- 29. 泄漏
- 30. NSInvocation的泄漏
看看Edward Z. Yang的[Space leak zoo](http://blog.ezyang.com/2011/05/space-leak-zoo/)。 –