Да, для небольших выделений (<128k, насколько я помню) glibc обычно будет использовать <code>sbrk и поддерживать свой собственный свободный список. Для больших выделений он будет использовать mmap()
и munmap()
.
munmap
обязательно вернет память в систему. Это системный вызов; glibc просто передает его ядру.
Предполагая, что это Linux, вы можете проверить поведение mmap для себя, написав некоторый тестовый код и выполнив cat /proc/PID/maps
, где PID
- идентификатор процесса вашего процесса. Он напечатает строку для каждой области виртуальной памяти (VMA), которую ядро поддерживает для вашего процесса; по существу, один для каждого mmap ().
Однако, даже если glibc не возвращает память в систему, она перезапустит ее через свой собственный внутренний свободный список. Учитывая это, а также тот факт, что использование mmap () / munmap () ничего не изменило, вам приходило в голову, что, возможно, ваша программа имеет утечку памяти?