0

malloc 是否担心 linux 内核中的内部碎片?例如,当我要分配 5 个页面时,将 malloc 向上舍入大小使其成为 2:5->8 的幂,以避免内核内部碎片,因为 linux 内核使用伙伴系统作为页面分配器。

4

1 回答 1

1

至少对于 glibc,它并不真正关心内核中的碎片。除了非常小或非常大的分配外,它主要是“最适合”的分配器。以下是 glibc 的“ malloc.c ”顶部附近评论的摘录:

  • 为什么使用这个malloc?

    这不是有史以来最快、最节省空间、最便携或最可调的 malloc。然而,它是最快的,同时也是最节省空间、便携和可调的。这些因素之间的一致平衡为 malloc 密集型程序提供了一个良好的通用分配器。算法的主要属性是:

    • 对于大(>= 512 字节)请求,它是一个纯粹的最佳分配器,通常通过 FIFO(即最近最少使用)决定关系。
    • 对于小型(默认情况下 <= 64 字节)请求,它是一个缓存分配器,用于维护快速回收的块池。
    • 在两者之间,以及对于大小请求的组合,它尽其所能尝试同时满足这两个目标。
    • 对于非常大的请求(默认情况下 >= 128KB),它依赖于系统内存映射工具(如果支持)。

    有关更长但稍微过时的高级描述,请参阅 http://gee.cs.oswego.edu/dl/html/malloc.html

如手册页mallopt(3)中所述, glibcmalloc实现使用函数或各种环境变量来设置各种参数是相当可调的。mallopt

于 2019-09-18T17:12:47.560 回答