Происходит следующее: malloc запрашивает argmem * 256 страниц из кучи (при условии размера страницы 4 Кбайт). Куча в свою очередь запрашивает память у операционной системы. Однако все, что делает, это создает записи в таблице страниц для вновь выделенного блока памяти. Фактическое физическое ОЗУ не выделяется для процесса, кроме того, которое требуется куче для отслеживания запроса malloc.
Как только процесс пытается получить доступ к одной из этих страниц, читая запись или , генерируется сбой страницы, поскольку запись в таблице страниц фактически является висящим указателем. Затем операционная система выделит физическую страницу процессу. Только тогда вы увидите, что объем доступной физической памяти уменьшится.
Поскольку все новые страницы начинают полностью обнуляться, Linux может использовать стратегию «копирования при записи» для оптимизации размещения страниц. то есть он может сохранять одну страницу полностью обнуленной и всегда выделять ее, когда процесс пытается прочитать с ранее неиспользованной страницы. Только когда процесс попытается записать на эту новую страницу, он фактически выделит полностью свежую страницу из физической памяти. Я не знаю, действительно ли Linux это делает, но если это так, простого чтения с новой страницы недостаточно для увеличения использования физической памяти.
Итак, ваша лучшая стратегия - выделить большой блок оперативной памяти, а затем записать что-нибудь с интервалом в 4096 байт.