【问题标题】:Custom memory allocator/manager in C ? which approach?C 中的自定义内存分配器/管理器?哪种方法?
【发布时间】:2011-04-24 15:25:18
【问题描述】:

我正在寻找一些用 c 编写的(自定义)内存管理器/分配器并浏览了一些文章,-

一些链接:

我必须使用任何可用的服务器对小型 Web 服务器进行沙箱处理,并且我在编写线程处理/分配方案的包装器时没有问题。 Apache WS 使用内存池来处理内存,并且池不是持久的,它是基于每个请求的。你们能推荐点什么吗?一些好的/最好的方法来解决这个问题?我的要求如下;-

  1. (有界响应时间)分配和取消分配必须提前知道,即一些 恒定成本 O(c),其中 c 是 常数。

  2. 来自异构的碎片 分配/取消分配大小或 应该处理序列,我可以编写模式/包装器来提供 一样的。

非常感谢您的帮助和想法!

【问题讨论】:

  • 我正在寻找类似的东西,我检查了 IBM 网站,但它们显示为 malloc_init 的内容适用于 unix,并且包含的​​库不在 Windows 中。我特别想找一个函数来代替sbrk() - 从操作系统中找到最后一个有效地址。

标签: c memory memory-management


【解决方案1】:

来自异构的碎片 分配/取消分配大小或 序列应该被处理,我可以 编写模式/包装器以提供 一样的。

为避免碎片化,您必须使用混合块分配策略。这里的混合意味着不同大小的元素块而不是具有单一大小的元素块,即分配器(或围绕它的包装器)应该维护不同大小的元素块(小、中和大等)。所有分配请求都应四舍五入到最近的块边界。此策略应确保您不会遭受外部碎片,但会导致内部碎片。您可以在以下链接中找到更多信息:

http://www.cotsjournalonline.com/magazine/articles/view/101217/pg:2 http://people.freebsd.org/~jasone/jemalloc/bsdcan2006/jemalloc.pdf

【讨论】:

    【解决方案2】:

    只是为了在您的列表中再添加一个

    Google Performance Tools

    它显着提高了内存分配性能,并且具有 CPU 和内存分析器。 他们的Thread-Caching Malloc 实现对于多线程应用程序来说非常有效。

    【讨论】:

    • 谢谢!它看起来非常好。但是有一个疑问,我可能错了,因为垃圾收集,它会变成非实时的,我的意思是没有“有界响应时间”吗?
    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2021-07-24
    • 1970-01-01
    • 2012-02-22
    • 2014-01-18
    • 2011-05-11
    相关资源
    最近更新 更多