free()是否取消映射进程的内存?
我正在Linux 2.6.16内核上运行C程序。我认为程序中没有内存泄漏,但是经过某些操作,程序的内存消耗保持稳定,并且不会减少。我使用“ ps v”命令监视程序的RSS值。 valgrind massif工具显示在我的进程中mmap分配了很大一部分堆。但是根据代码,这些分配应该在操作完成后释放。是否因为释放的内存仍被映射和/或仍对进程的RSS值起作用? 任何见解将不胜感激! 以下是valgrind massif报告中的片段。注意,我已经为massif工具打开了--pages-as-heap选项,以测量程序使用的所有内存。 -------------------------------------------------------------------------------- n time(i) total(B) useful-heap(B) extra-heap(B) stacks(B) -------------------------------------------------------------------------------- 85 701,483,989,262 173,576,192 173,576,192 0 0 86 704,352,949,469 173,367,296 173,367,296 0 0 87 707,582,275,643 173,367,296 173,367,296 0 0 88 710,536,145,814 173,367,296 173,367,296 0 0 100.00% (173,367,296B) (page allocation syscalls) mmap/mremap/brk, --alloc-fns, etc. ->53.40% …