3

glibc 的 malloc 实现支持 'malloc_trim()' 调用,它允许应用程序将未使用的(即释放的内存块)释放回系统(实现细节:通过使用负参数调用 sbrk() 来减少程序的数据段)。但是,此功能仅适用于主竞技场。在多线程程序中,有多个存储释放块的区域。为什么这个调用也不会从其他领域释放内存?

4

1 回答 1

2

除了主要的竞技场之外,其他竞技场可能是从系统分配的,mmap因此sbrk不能用于将该内存返回给系统。可以使用 glibcmremap来缩小这些其他领域。另请注意,malloc_trim只能在竞技场结束时返回内存,如果竞技场中间有空块,则无法释放该内存。

于 2012-06-25T20:23:16.343 回答