在32位操作系统中,分配给任何一个程序的最大内存有限,Mathematica正常终止内核并返回最大内存分配错误。
然而,在64位操作系统上,Mathematica将自由使用所有可用内存并使系统停止运行。因此,限制内存使用的正确方法是什么?可以使用MemoryConstrained
与$Pre
或CellEvaluationFunction
结合使用,但我不想为此目的使用其中任何一个,或者必须修改现有用途以合并此功能。
是否存在另一种全局限制内存使用的方法,例如内核标志或系统$ Option?
答案 0 :(得分:14)
在 Mathematica 8中你可以启动一个内存监视器,类似于:
maxMemAllowed = 15449604;
intervalBetweenTests = 1; (*seconds*)
iAmAliveSignal = 0;
Dynamic[iAmAliveSignal]
RunScheduledTask[
If[MemoryInUse[] > maxMemAllowed , Quit[], iAmAliveSignal++],
intervalBetweenTests];
记得跑
RemoveScheduledTask[ScheduledTasks[]];
禁用它。
修改强>
您可以在退出前提醒或以交互方式决定做什么。 根据要求,这是一个分配1.3GB的试用版。我不能比这台机器更进一步。
maxMemAllowed = 1.3 1024^3; (*1.3 GB*)
intervalBetweenTests = 1; (*Seconds*)
iAmAliveSignal = 0;
leyendToPrint = "";
Dynamic[leyendToPrint]
RunScheduledTask[
If[MemoryInUse[] > maxMemAllowed,
CreateDialog[CancelButton["Max Mem Reached", DialogReturn[]]];
Quit[],
Print["Memory in use: ", MemoryInUse[]];
leyendToPrint =
"Seconds elapsed = " <> ToString[iAmAliveSignal++]],
intervalBetweenTests];
IntegerPartitions[320, {15}];