Причины gzopen(), приводящие к ENOMEM
У меня есть программа, общий объем памяти которой составляет около 100 МБ (размер виртуальной машины, сверху, в то время как остановлен в gdb
) пытается открыть новый (еще не существующий) сжатый файл журнала, используя gzopen
, Это не с errno
установлен в ENOMEM
несмотря на то, что в системе 6 ГБ памяти полностью свободны (даже без кешей) и много места в файловой системе (это было бы ENOSPC
, Я знаю). Есть ли еще какие-то неясные проблемы, которые могут вызвать это? Что-то в библиотеке случайно выделяет гигабайты на гигабайтах памяти без веской причины?
Для заметки, мои ограничения установлены неограниченно.
2 ответа
Оказывается, zlib не возвращался ENOMEM
, Это выручало, потому что мы передали это аргумент режима w+
, что недопустимо, потому что он не может одновременно читать и записывать данный файл gzip. ENOMEM
пришел из того, что случилось сидеть в errno
из предыдущих библиотечных / системных вызовов.
Нет, в zlib нет ничего, что выделило бы больше, чем MiB или два. zlib будет только устанавливать errno на ноль. Сам по себе он никогда не устанавливает ошибку в ENOMEM. Функции библиотеки, которые он вызывает, могут. Какую версию zlib вы используете?