[英]Causes of gzopen() leading to ENOMEM
我有一個程序,其總內存占用量約為100 MiB(VM大小,頂部,而在gdb
停止),試圖使用gzopen
打開新的(尚不存在)壓縮日志文件。 盡管將errno
設置為ENOMEM
,但這仍然失敗,盡管該系統具有6GB的完全可用內存(甚至不保存緩存),並且在文件系統上有很多空間(我知道這是ENOSPC
)。 是否還有其他可能導致此問題的晦澀問題? 庫中是否有某些東西無緣無故地在GB的內存上分配了GB?
請注意,我的ulimit設置為無限制。
不,zlib中沒有什么可以分配超過一兩個MiB的。 zlib只會將errno設置為零。 它自己不會將errno設置為ENOMEM。 它可能調用的庫函數。 您正在使用哪個版本的zlib?
事實證明zlib沒有返回ENOMEM
。 它之所以失敗,是因為我們給它傳遞了模式參數w+
,這是無效的,因為它無法同時讀寫給定的gzip文件。 ENOMEM
來自之前的庫/系統調用中坐在errno
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.