top
сообщит вам количество физической памяти, выделенной вашему процессу. Виртуальная память - это абстракция поверх физической памяти, и malloc
/ free
обеспечивают абстракцию поверх этого.
malloc
резервирует место в куче вашей программы. Куча - это просто область виртуального адресного пространства вашей программы, используемая для временного хранения. Когда вы звоните malloc
больше, куча расширяется с помощью системного вызова brk
. Однако, хотя виртуальный размер вашей кучи увеличивается, физическая память фактически не назначается до тех пор, пока вы не выполните чтение или запись в свою вновь выделенную память. Например, поскольку вы никогда не выполняете запись в память, выделенную для полей inner
ваших записей, эти выделения не будут занимать никакой физической ОЗУ.
free
просто освобождает части кучи, выделенной malloc
. Это не обязательно уменьшает виртуальный размер кучи, поэтому физическая память, связанная с ней, может быть не освобождена. Вот почему вы не видите сокращения использования физической памяти.