2012-11-06 55 views
6

Perl解釋器(又名「perl」)在內存不足時有什麼標準(ish)方法嗎?是否以任何方式記錄/標出?以統一的方式編碼?有沒有一種標準的方式讓Perl在內存不足時運行?

我特別感興趣的是任何標準都表達爲立法Perl代碼正在運行 - 例如,將調用dieEND塊會被執行嗎?等...

我很好,都有一個「理論」的答案(例如某種通用的「這是perl代碼應該做的一般內存不足」的任務說明文件從拉里/ P5P/etc ...,即使不是100%的malloc()調用遵循此規則);或者一個「實用的」語句(例如Perl中的所有malloc()調用都被包裝成通用的「allocate_memory」函數,該函數統一處理所有失敗)。

答案可能有可能取決於具體導致內存不足的原因(例如,爲Perl代碼的數據結構提供更多內存的請求與內部Perl代碼分配的內存無關,而與顯式「需要存儲更多數據」邏輯無關在Perl程序中)。

如果答案與實施有很大關係,則假定perl用於Solaris/Linux,並且縮小到任何最新的穩定版本(5.8到5.16)都是可以接受的。

這個問題僅限於標準的Perl解釋器,但是您希望將預編譯配置(例如,隨主要Linux發行版附帶的perl,或編譯所有默認值的編譯器等等)定義爲... )。

注:這個問題就出來了吉爾的評論來another Q

回答

6

以一看manual page for the various diagnostic warnings是Perl會發出當「使用診斷」語法啓用,你可以看到各種不同類型的「出內存「錯誤及其含義。

所以你可以從這些消息推斷出「標準」行爲; (!「內存不足」)的一個帶有感嘆號聽起來像你問的是一個:「一個非常致命錯誤(nontrappable)」

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會假設它有足夠的內存來關閉)。

相關問題