Mmap не работает с ENOMEM - PullRequest
       6

Mmap не работает с ENOMEM

1 голос
/ 19 февраля 2020

Я использую mmap() в нашем приложении как:

 mmap(NULL, get_size(), PROT_NONE,  MAP_ANONYMOUS | MAP_SHARED, -1, 0);

Но я намерен просто зарезервировать get_size() указанное количество памяти, но я не собираюсь его использовать. Иногда я вижу, что mmap() терпит неудачу с ENOMEM. Вопрос в том, почему mmap() должен потерпеть неудачу с ENOMEM здесь, когда мы просто пытаемся зарезервировать адресное пространство, но не пытаемся фактически использовать его. Это из-за MAP_SHARED?

1 Ответ

2 голосов
/ 19 февраля 2020

Существует ограничение на размер виртуальной памяти процесса, который можно увидеть с помощью ulimit -v. Если вы достигли этого предела, вы можете попробовать удалить его с помощью ulimit -v unlimited. Вы также можете получить и установить предел программно с помощью getrlimit / setrlimit функций POSIX.

Системные ограничения по умолчанию и жесткие ограничения установлены в /etc/security/limits.conf и файлах из каталога /etc/security/limits.d.


Другая причина сбоя mmap с ENOMEM превышает максимальное число отображений памяти для процесса, управляемого параметром конфигурации vm.max_map_count sysctl.

...