似乎即使我使用malloc()
为Linux进程分配的所有内存都已经被释放,该进程仍然保留了内存而没有将其返回给操作系统。
运行默认情况下没有泄漏的valgrind massif
工具。
使用--pages-as-heap=yes
选项运行valgrind
会显示如下内容:
->13.77% (7,655,424B) 0x35FEEEB069: brk (brk.c:31)
->13.77% (7,655,424B) 0x35FEEEB113: sbrk (sbrk.c:53)
->13.77% (7,655,424B) 0x35FEE82717: __default_morecore (morecore.c:48)
->13.77% (7,655,424B) 0x35FEE7DCCB: _int_malloc (malloc.c:2455)
->13.77% (7,655,424B) 0x35FEE7F4F1: malloc (malloc.c:2862)
因此,尽管内存已经通过free()
释放,但看起来malloc
调用了brk/sbrk
并未将其返回给操作系统。
我该如何强制free()
立即调用sbrk()
并将所有内存都返回给操作系统?
我正在运行一个非常低端的平台,每个MB都很宝贵。
提前感谢您的帮助。
free()
函数。 - Iharob Al Asimi