6

Perl解释器(又名“perl”)在内存不足时是否有标准(ish)方式来表现?它是否以任何方式记录/指定?以某种统一的方式编码?

我对任何被表示为对正在运行的 Perl 代码的约定的标准特别感兴趣——例如,会die被调用吗?会END被执行block吗?ETC...

我对“理论”答案都很好(例如,某种通用的“这是 perl 代码在内存不足时通常应该做的”任务声明文档来自 Larry/P5P/etc ......,即使不是 100% 的 malloc() 调用遵循此规则);或“实用”语句(例如,Perl 中的所有 malloc() 调用都包装在通用的“allocate_memory”函数中,该函数统一处理所有故障)。

答案可能取决于具体导致内存不足的原因(例如,为 Perl 代码的数据结构请求更多内存与内部 Perl 代码分配的内存与 Perl 程序中明确的“需要存储更多数据”逻辑无关) .

如果答案非常依赖于实现,假设 perl 用于 Solaris/Linux,并且缩小到任何最近的稳定版本(5.8 到 5.16)都是可以接受的。

问题仅限于标准 Perl 解释器,但是您希望将其定义为预编译配置(例如,主要 Linux 发行版附带的 perl,或者使用所有默认值单独编译的 perl,等等)。

注意:这个问题来自 Gilles 对另一个 Q的评论

4

1 回答 1

6

查看手册页,了解Perl 在启用“使用诊断”杂注时将发出的各种诊断警告,您可以看到各种不同类型的“内存不足”错误及其含义。

因此,您可以从这些消息中推断出“标准”行为;带有感叹号的那个(“内存不足!”)听起来像您要问的那个:

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 假设它有足够的内存来干净地关闭)。

于 2012-11-06T04:07:47.853 回答