Размер виртуальной памяти в Linux

Я пытаюсь глубоко разобраться в управлении виртуальной памятью в ОС Linux.

Я действительно не понимаю, как ОС определяет размер виртуальной машины для процесса.

Я знаю, что 32-разрядная ОС x86 может предоставить до 3 ГБ пространства виртуальных адресов ... Всегда ли это правда?

В моем случае у меня около 110 МБ физической памяти с 32-разрядным Linux , и у моего основного процесса есть адресное пространство vm около 660 МБ. Однако в физической памяти (RSS моего процесса) находится только 50 МБ, поэтому моя физическая оперативная память не заполнена. Остальное бесплатно и почти все используется кешем страниц. Кажется, это нормальное поведение.

Если я проверю / proc / my_process_PID / smap, будет несколько анонимных VMA размером 8 МБ.

Моя настоящая проблема заключается в том, что мне нужно добавить в код дополнительные 10 МБ malloc, но, к сожалению, OOM-Killer убивает мой процесс (нехватка памяти) ... Я думаю, что в vm для кучи, не так ли? Есть ли где-то огромная утечка памяти?

Почему ОС не увеличивает размер виртуальной машины моего процесса так?

Для информации, размер виртуальной машины не ограничен: ulimit -v: unlimited

6
задан Chris says Reinstate Monica 2 November 2011 в 19:53
поделиться