vmalloc()
— это внутренняя функция ядра. Он недоступен для пользовательских программ. Это не влияет на выделение памяти для пользовательских программ. VmallocTotal
ограничивает выделение кода ядра, который вызывает vmalloc()
(, а VmallocTotal
не изменяется ни автоматически, ни вручную ).
Максимальный размер памяти, который может быть «выделен» пользовательскими программами, зависит от настроек overcommit. Я пишу «выделено» в пугающих кавычках, потому что «переполнение» несколько противоречит идее «выделения памяти». Одно объяснение здесь, вы можете искать по ключевым словам, которые он использует для других объяснений:https://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work
Как сказано в документации по ядру , системные вызовы, такие как mmap()
или старый sbrk()
, по умолчанию не выделяют память. Они возвращают «адресное пространство». Реальная память будет отображена по требованию -, если/когда она будет записана. Память отображается в виде страниц (, обычно 4096 байтов ).