Если вы выделяете только внутри кучи (вы знаете, выделяете ли вы вне кучи), используйте (Gc.quick_stat()).Gc.heap_words
, чтобы получить размер кучи, что является хорошим приближением для всей памяти, используемой OCaml. Как видно из названия, это поле выражается в 32- или 64-битных словах.
Вы должны сравнить это с некоторым пределом, который OCaml не может угадать для вас, который является максимальным объемом памяти, который вы хотите использовать для вашей программы. Значение зависит от того, сколько памяти вы хотите оставить другим процессам, считаете ли вы, что обмен допустим, и так далее. Это второе значение зависит от вашей системы, а не от OCaml. Даже если вы хотите вычислить это значение как фиксированную долю от общего объема оперативной памяти на вашем компьютере, я не знаю какого-либо переносимого способа сделать это с помощью OCaml: вы должны рассказать нам больше о вашей системе.
Не пытайтесь использовать free_words
и подобные поля в GC stats . Они только говорят вам, как пространство делится внутри кучи . «Свободные» слова по-прежнему занимают место, и роль сборщика мусора заключается в том, чтобы сохранить это значение на разумной части от общего. Для этого он изменяет размер кучи.