Причины gzopen(), приводящие к ENOMEM

У меня есть программа, общий объем памяти которой составляет около 100 МБ (размер виртуальной машины, сверху, в то время как остановлен в gdb) пытается открыть новый (еще не существующий) сжатый файл журнала, используя gzopen, Это не с errno установлен в ENOMEMнесмотря на то, что в системе 6 ГБ памяти полностью свободны (даже без кешей) и много места в файловой системе (это было бы ENOSPC, Я знаю). Есть ли еще какие-то неясные проблемы, которые могут вызвать это? Что-то в библиотеке случайно выделяет гигабайты на гигабайтах памяти без веской причины?

Для заметки, мои ограничения установлены неограниченно.

2 ответа

Решение

Оказывается, zlib не возвращался ENOMEM, Это выручало, потому что мы передали это аргумент режима w+, что недопустимо, потому что он не может одновременно читать и записывать данный файл gzip. ENOMEM пришел из того, что случилось сидеть в errno из предыдущих библиотечных / системных вызовов.

Нет, в zlib нет ничего, что выделило бы больше, чем MiB или два. zlib будет только устанавливать errno на ноль. Сам по себе он никогда не устанавливает ошибку в ENOMEM. Функции библиотеки, которые он вызывает, могут. Какую версию zlib вы используете?

Другие вопросы по тегам