在ocaml下检测内存是否低

时间:2011-06-06 10:02:58

标签: memory ocaml

我需要一种方法来检测内存是否很低,以便我的ocaml程序可以对此作出反应。你能指点我如何实施或使用它吗?

任何提示?

再见安德烈亚斯

1 个答案:

答案 0 :(得分:5)

如果你只是在堆内部分配(你会知道你是否在堆外部分配),使用(Gc.quick_stat()).Gc.heap_words来获取堆的大小,这是OCaml使用的整个内存的一个很好的近似值。如其名称所示,该字段以32位或64位字表示。

您必须将此与OCaml无法猜测的某些限制进行比较,这是您希望程序使用的最大内存。该值取决于您想要留给其他进程的内存量,您是否考虑交换可接受的内容等等。第二个值取决于您的系统,而不是OCaml。即使您想将此值计算为计算机上RAM总量的固定分数,我也不知道使用OCaml执行此操作的任何可移植方式:您必须告诉我们有关您系统的更多信息。

请勿尝试使用GC stats中的free_words和类似字段。这些只告诉您空间如何在堆内划分。 “免费”字仍占用空间,垃圾收集器的作用是将此值保持在总数的合理分数。它会调整堆的大小以便执行此操作。