Perl 解释器(又名“perl”)在内存不足时是否有标准的行为方式?是否以任何方式记录/指定?以某种统一的方式编码?
我对任何表示为正在运行的 Perl 代码契约的标准特别感兴趣 - 例如,将die
叫做?将要END
块被执行? ETC...
我对这两个“理论”答案都很满意(例如,来自 Larry/P5P/etc 的某种通用“这是 Perl 代码在内存不足时通常应该执行的操作”任务声明文档...,即使并非 100% 的 malloc() 调用遵循此规则);或“实用”语句(例如,Perl 中的所有 malloc() 调用都包装到通用的“allocate_memory”函数中,该函数统一处理所有失败)。
答案可能取决于具体导致内存不足的原因(例如,为 Perl 代码的数据结构请求更多内存与由与 Perl 程序中显式“需要存储更多数据”逻辑无关的内部 Perl 代码分配的内存) 。
如果答案与实现高度相关,则假设适用于 Solaris/Linux 的 perl,并缩小到任何最新的稳定版本(5.8 到 5.16)是可以接受的。
这个问题仅限于标准 Perl 解释器,但是您希望定义它的预编译配置(例如,主要 Linux 发行版附带的 Perl,或者使用所有默认值编译的 Perl 等)。
NOTE: This question came out of Gilles's comment to another Q https://stackoverflow.com/questions/13234866/can-a-perl-system-call-ever-die#comment18042068_13234866
看看各种诊断警告的手册页 http://www.manpagez.com/man/1/perldiag/当启用“use Diagnostics”编译指示时,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 假设它有足够的内存来干净地关闭)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)