Ситуация такая: есть Linux-машина с 2 GB RAM. В какой-то момент
времени в работающей программе вызов sysconf(_SC_AVPHYS_PAGES)
возвращает количество страниц, общий размер которых составляет около
30 MB.
На основании этих данный делается попытка резервировать регион адресного пространства так:
mmap(NULL,
size,
PROT_READ | PROT_WRITE | PROT_EXEC,
MAP_PRIVATE | MAP_NORESERVE | MAP_ANONYMOUS,
-1,
0)
где size == 262144 (256 килобайт).
Но этот вызов иногда проваливается! Очевидно (поправьте меня, если я
ошибаюсь), фрагментация памяти такова, что система не может выделить
последовательность страниц такой длины...
А вопрос такой: каким же образом можно понять, что в системе есть
достаточное количество свободной физической памяти, которую можно
резервировать (как?), не опасаясь ошибки?
Или это вообще невозможно? Может быть, есть какой-то приближённый
метод?
Заранее спасибо!
Форум —
Development