C中的自定义内存分配器/管理器?哪种方法?

时间:2010-10-13 02:48:22

标签: c memory memory-management

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

一些链接:

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

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

  2. 来自异构的碎片     分配/解除分配大小或     应该处理序列,我可以编写schema / wrapper来提供     同样。

  3. 真的很感谢你的帮助和想法!

2 个答案:

答案 0 :(得分:2)

  

来自异构的碎片   分配/解除分配大小或   应该处理序列,我可以   编写架构/包装器来提供   同样的。

为避免碎片,您必须使用混合块分配策略。这里的混合意味着不同于具有单个尺寸的元件块的不同尺寸的元件块,即分配器(或其周围的包装器)应该保持不同尺寸元件(小,中和大等)的块。应将所有分配请求四舍五入到最近的块边界。该策略应确保您不会受到外部碎片的影响,但可能导致内部碎片化。您可以通过以下链接找到更多信息:

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

答案 1 :(得分:1)

只需在列表中再添加一个

Google Performance Tools

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