Я пытаюсь глубоко разобраться в управлении виртуальной памятью в ОС 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