当Perl耗尽内存时,是否有标准的处理方式?

6
有没有一种标准(或类似标准)的方式,让Perl解释器(即“perl”)在内存不足时表现出一致的行为?这是否有文档或规范可供参考?是否以统一的方式编码?
我特别关注以Perl代码运行方式表达的任何标准 - 例如,会调用die吗?是否执行END块?等等...
我对“理论”答案和“实际”答案都很满意。可能取决于导致内存不足的具体原因(例如,为Perl代码的数据结构请求更多内存与由Perl程序中与显式“需要存储更多数据”的逻辑无关的内部Perl代码分配的内存)。
如果答案极度依赖于实现,则假定适用于Solaris / Linux的perl,并缩小到任何最近的稳定版本(从5.8到5.16)。
这个问题限于标准Perl解释器,不过您可以根据预编译配置进行定义(例如随大型Linux发行版提供的Perl,或者编译时所有默认设置均未更改的Perl等)。请注意:此问题源自Gilles对另一个问题的评论。
1个回答

6
看一下启用了"use diagnostics"指令时,Perl发出的各种诊断警告的手册页,您可以看到各种不同类型的“内存不足”错误及其含义。
因此,您可以从这些消息中推断出“标准”行为;其中带有感叹号(“Out of memory!”)的那个听起来像是您所询问的内容。
Out of memory!
(X) The malloc() function returned 0, indicating there was
insufficient remaining memory (or virtual memory) to satisfy the
request.  Perl has no option but to exit immediately.

"X"级错误标记为“非常致命的错误(无法捕获)”。

然而,如果是一个“大请求”(大于64K),它是可以被捕获的(我猜Perl假设它有足够的内存来干净地关闭)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接