为什么malloc_trim()只适用于主竞技场

Why does malloc_trim() only work with the main arena?

本文关键字:适用于 竞技场 malloc trim 为什么      更新时间:2023-10-16

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

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