2011-06-06 26 views
4

我需要一種方法來檢測內存是否低,以便我的ocaml程序可以對此做出反應。你能指出我如何實施或使用它嗎?檢測內存是否低於ocaml

任何提示?

再見安德烈亞斯

+2

您好,本網站希望您回到過去提出的問題的答案,並在適當的情況下選擇一個「已接受」的答案,以幫助未來有同樣問題的人。如果你不這樣做,你會針對你提出的每個新問題發出煩人的言論(比如這個)。 – 2011-06-06 10:19:09

回答

5

如果只堆內的分配(你會知道,如果你是堆外分配),使用(Gc.quick_stat()).Gc.heap_words得到堆的大小,一個很好的近似爲所使用的整個存儲器OCaml的。正如其名稱所示,該字段以32位或64位字表示。

您必須將此與OCaml無法爲您猜測的一些限制進行比較,這是您希望程序使用的最大內存。值取決於您想要留給其他進程的內存量,是否考慮交換可接受的內容等等。這第二個值取決於你的系統,而不是OCaml。即使您想將此值計算爲計算機上RAM總量的固定分數,我也不知道用OCaml執行此操作的任何便攜方式:您必須告訴我們有關您的系統的更多信息。

請勿嘗試使用free_wordsGC stats中的類似字段。這些只告訴你如何將空間分爲堆內。 「自由」這個詞仍然佔據了空間,垃圾收集者的角色是將這個值保持在合理的一部分。它調整堆以便執行此操作。

+0

感謝您的提示,這很有幫助:)如果將有一種便攜的方式來計算系統中的可用內存,會很好。 – 2011-06-06 11:04:58