glibc的malloc实现支持“malloc_trim()”调用,该调用使应用程序可以将未使用的(即已释放的内存块)释放回系统(实现细节:通过使用带负参数的sbrk()减少程序的数据段)。但是,此功能仅适用于主舞台。在多线程程序中,有多个保存释放的块的舞台。为什么此调用也不会释放其他区域的内存?

最佳答案

除了主竞技场之外的其他竞技场都可能使用mmap从系统中分配了,因此sbrk无法用于将该内存返回给系统。可以使glibc使用mremap缩小其他 Realm 。还要注意malloc_trim只能在竞技场结束时返回内存,如果竞技场中间有空块,则无法释放该内存。

关于c++ - 为什么malloc_trim()仅适用于主舞台?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11196482/

10-11 21:15