Ваш профиль памяти фактически является потреблением адресного пространства процесса (сумма страниц mmap -ed, как, например, дано /proc/self/statm
или /proc/self/maps
с точки зрения самого процесса).
Но когда функция C или C ++ освобождает память (ранее выделенную с помощью malloc
или new
, которая использует mmap
для получения памяти из ядра Linux), используя free
или delete
,он не возвращается в систему (с использованием munmap - потому что это будет слишком медленно или непрактично [проблемы фрагментации] - он просто сохраняется как многоразовый для будущего malloc
или new
.
Таким образом, освобождение произошло по запросу free
, но память не возвращена системе, а оставлена для последующего повторного использования.
Если вы действительно хотели вернуть память, напишите свойсобственный распределитель (выше mmap
и munmap
), но обычно это не стоит усилий.
Возможно, использование Boehm's GC может помочь (это очень полезно, чтобы не беспокоиться о free
-ing или delete
-ing), если выявно позвоните по номеру GC_gcollect()
(но я не уверен в этом), но вас это не должно волновать.
И ваш вопрос технически не связан с gcc
(он был бы таким же с другим C ++компилятор).Он связан с malloc
и new
(то есть со стандартными библиотеками C & C ++) в Linux.