为什么malloc_trim()只适用于主竞技场
Why does malloc_trim() only work with the main arena?
glibc 的 malloc 实现支持"malloc_trim()"调用,允许应用程序将未使用的(即释放的内存块)释放回系统(实现细节:通过使用负参数调用 sbrk() 来减少程序的数据段)。但是,此功能仅适用于主竞技场。在多线程程序中,有多个舞台可以保存释放的块。为什么此调用不会从其他领域释放内存?
除主竞技场之外的竞技场可能是使用mmap
从系统中分配的,因此sbrk
不能用于将该内存返回到系统。有可能让glibc使用mremap
来缩小这些其他领域。另请注意,malloc_trim
只能在竞技场结束时返回内存,如果竞技场中间有空块,则无法释放该内存。
相关文章:
- OpenGL - 在 NDC 中计算位置适用于着色器,但不适用于'regular'程序
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 如何修复我的最大公约数代码?它适用于除零和零以外的所有数字
- 选择排序C++(已修改)并非适用于所有情况
- 无法让"std::enable_if"适用于无作用域枚举
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 确定夏令时是否适用于特定日期
- 是否有一种 STL 算法可以最后找到,但它也适用于指针?
- QT 样式表主题,适用于使用属性选择器的整个应用程序
- C++带有适用于左值和右值的引用参数的函数
- 代码适用于调试,但不适用于发布
- C++17 和更新的 std::分配器是否适用于动态数量的自定义堆?
- 适用于大型数组的无复制线程安全环形缓冲区
- NRVO 是否也适用于协程?
- 约束包容是否仅适用于概念?
- 程序只适用于包含(无副作用)cout声明
- 适用于频繁更改的大型数据集的最佳数据结构
- 相同的 for 循环适用于其他项目,但不适用于此项目。为什么?
- 无法让 FastNoise 适用于草地
- 为什么malloc_trim()只适用于主竞技场