正确的方法来限制Mathematica内存的使用?

Mr.*_*ard 21 memory wolfram-mathematica allocation cap

在32位操作系统下,分配给任何一个程序的最大内存有限,Mathematica优雅地终止内核并返回最大内存分配错误.

然而,在64位操作系统上,Mathematica将自由使用所有可用内存并使系统停止运行.因此,限制内存使用的正确方法是什么?可以使用MemoryConstrained组合$PreCellEvaluationFunction但我不想为此目的绑定其中任何一个,或者必须修改现有用途以合并此功能.

是否存在另一种全局限制内存使用的方法,例如内核标志或系统$ Option?

Dr.*_*ius 14

Mathematica 8中你可以启动一个内存监视器,类似于:

maxMemAllowed        = 15449604;
intervalBetweenTests = 1; (*seconds*)
iAmAliveSignal       = 0;
Dynamic[iAmAliveSignal]
RunScheduledTask[
       If[MemoryInUse[] > maxMemAllowed , Quit[], iAmAliveSignal++],      
       intervalBetweenTests];
Run Code Online (Sandbox Code Playgroud)

记得跑

RemoveScheduledTask[ScheduledTasks[]];
Run Code Online (Sandbox Code Playgroud)

禁用它.

编辑

在退出之前,您可以提醒或交互式决定做什么.根据要求,这是一个分配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}];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述