Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
glibc 的 malloc 实现支持 'malloc_trim()' 调用,它允许应用程序将未使用的(即释放的内存块)释放回系统(实现细节:通过使用负参数调用 sbrk() 来减少程序的数据段)。但是,此功能仅适用于主竞技场。在多线程程序中,有多个存储释放块的区域。为什么这个调用也不会从其他领域释放内存?
除了主要的竞技场之外,其他竞技场可能是从系统分配的,mmap因此sbrk不能用于将该内存返回给系统。可以使用 glibcmremap来缩小这些其他领域。另请注意,malloc_trim只能在竞技场结束时返回内存,如果竞技场中间有空块,则无法释放该内存。
mmap
sbrk
mremap
malloc_trim