Perl在内存耗尽时是否有标准的行为方式?

Perl解释器(也就是“perl”)在内存耗尽时是否有标准(ish)方式?它是以任何方式记录/推出的吗?以统一的方式编码?

我对任何表示为运行Perl代码的约定的标准特别感兴趣 – 例如,将被称为? END块会被执行吗?等等…

我对两个“理论上”的答案都很好(例如,某些通用的“这是perl代码应该在内存中执行的内容”来自Larry / P5P /等的任务声明文件……,即使不是100%的malloc()调用遵循这个规则);或者“实用”语句(例如,Perl中的所有malloc()调用都包含在一个通用的“allocate_memory”函数中,该函数统一处理所有失败).

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

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

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

注意:这个问题来自Gilles对another Q评论

解决方法

看一下在启用“使用诊断”编译指示时Perl将发出的 manual page for the various diagnostic warnings,您可以看到各种不同类型的“内存不足”错误及其含义.

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

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

相关文章

1. 如何去重 #!/usr/bin/perl use strict; my %hash; while(...
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据...
表的数据字典格式如下:如果手动写MySQL建表语句,确认麻烦,...
巡检类工作经常会出具日报,最近在原有日报的基础上又新增了...
在实际生产环境中,常常需要从后台日志中截取报文,报文的形...
最近写的一个perl程序,通过关键词匹配统计其出现的频率,让...