2012-06-10 218 views
0

我有一個程序,其總內存大小約爲100 MiB(虛擬機大小,在上面,而在gdb停止),試圖打開一個新的(不存在的)壓縮日誌文件使用gzopen。這失敗了,儘管系統有6GB內存完全免費(甚至沒有緩存),並且文件系統上有很多空間(我知道這將是ENOSPC),但errno設置爲ENOMEM。是否有更多晦澀的問題可能導致這種情況?圖書館中的某些東西是否在沒有充分理由的情況下偶爾分配千兆字節的內存?gzopen()導致ENOMEM的原因

請注意,我的ulimits設置爲無限制。

回答

0

原來zlib沒有返回ENOMEM。因爲我們已經傳遞了模式參數w+,因此無效,因爲它無法同時讀寫給定的gzip文件。 ENOMEM來自前一次庫/系統調用發生在errno的事件。

0

不,zlib中沒有任何內容會分配超過一個或兩個MiB。 zlib只會將errno設置爲零。就其本身而言,它從不會將errno設置爲ENOMEM。它調用的庫函數可能。你使用的是什麼版本的zlib?

相關問題