c++ - Linux(或 RedHat Linux)上的小块分配器以避免内存碎片

标签 c++ linux memory-management

我知道有一个用于用户应用程序的分配器,而不是在 HP-UX 上处理大量小块分配 link text在 Windows XP 上 Low-fragmentation Heap .在 HP-UX 上,可以调整分配器,在 Windows XP 上,它认为大小小于 16 K 的 block 是小的。

我的问题是我找不到任何关于这种用于在 Linux(实际上是 RedHat Linux)上运行的用户程序的分配器的信息。如果有这样的分配器,我实际上想知道它可以处理的最大块大小。


更新
我找到了 jemalloc ( http://www.canonware.com/jemalloc/ )。它处理小型、大型和巨大的 block :http://www.canonware.com/download/jemalloc/jemalloc-latest/doc/jemalloc.html#size_classes .

最佳答案

Redhat Linux 或任何基于 Linux 的发行版大多使用 DL-Malloc ( http://gee.cs.oswego.edu/dl/html/malloc.html )。

正如 Kirill 指出的那样,对于用户应用程序,如果由于较小的 block 而导致碎片较多,则最好使用单独的内存分配器。

如果用户应用程序很小,您可以尝试使用 C++ placement new/delete 来覆盖默认的分配器模式。 ( http://en.wikipedia.org/wiki/Placement_syntax )

关于c++ - Linux(或 RedHat Linux)上的小块分配器以避免内存碎片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2415373/

相关文章:

linux - 如何在 Linux (Ubuntu) 中输出 1kHz 频率和功率/音量 = 60%?

c++ - 如何通过引用或指针传递的指针正确释放函数中分配的 main 内存?

c++ - C++ 中的 register 关键字有什么问题?

c++ - boost 池的 map ?

c++ - 改变音频的节奏(速度)

c++ - 如何在 Linux 中使用 Google Protobufs 确保相同的输出文件 (*.o)

linux - 使用 linux 从文本文件中有选择地解析注释和值

c - 将字符串写入 char 指针时的内存行为

MySQL不释放内存

c++ - 列表初始化(使用花括号)有什么好处?