我做我的计算机科学项目。 我使用C.一个要求对我们来说,我们不能保持分配的内存小块做多处理器编程。 内存可以在大块需要时进行分配。
所以,想象一下我用结构在我的计划。 而我的程序的工作方式需要动态内存分配。 但是,在我们使用的硬件非常昂贵。 所以最好的解决办法是在开始时,每当需要分配的内存大池此池中分配内存。
我设想这个工作的方式是,我将分配这些结构的位阵列或写入分配并从该池释放内存,我自己的内存管理模块。 但我想知道写这些模块最为理想的方式。 是否有可以帮助我管理内存或者是有一些方法,这些可以写任何库?
编辑:这是我使用平台:它运行的Ubuntu的AMD皓龙系统。 该皓龙处理器具有NUMA架构,我想分配内存时利用了这一点。 因此代替使用malloc,我使用numa_alloc_onnode哪一个特定节点上分配内存。 我想用这个来分配的内存大块,然后用一个内存管理器来管理此内存。
有一吨的内存池经理在那里,一些商业和一些开源。 看看他们,并随时你有一个概述之后在这里提出更具体的问题。
一些谷歌的结果(C存储池管理器开源):
http://256stuff.com/sources/mpool/
http://www.ravenbrook.com/project/mps/
下面是IBM关于这个问题的好文章:
http://www.ibm.com/developerworks/linux/library/l-memory/
既然你提到一个多处理器环境中(虽然不直接相关的内存管理),这也是一个值得读:
http://drdobbs.com/go-parallel/article/showArticle.jhtml?articleID=217500206
UPDATE
有取决于库所需的便携性不同的方法。 如果便携性是很重要的,库呈现一根绕的malloc(或释放calloc)包抓的内存块,然后应用更有效的实现(如针对特定目标的图书馆要实现测量)。 即针对特定的操作系统通常会使用本地操作系统调用,获得一些性能和可移植性的成本,充分利用该操作系统的细节的能力的库。
内存管理库,力争为特定目标而有所不同。 这里有一些目标,我已经看到了多年来:
- 对于大与小的物体独立的管理策略
- 事情将生活将被迅速删除较长和东西分开管理策略
- 调试内存管理问题(例如写一个特定的模式到分配的内存和分配上月底一些额外的填充,使得调试功能可以看到,如果填充被一个出界外指针访问覆盖)
- 特定平台的更快的内存访问给定的约束(例如,一些分配可能是昂贵的,其他比较便宜)。
- 支持内存碎片整理(例如,通过真正分配指针的指针,以用于存取存储器的特殊语义)。
更新2
根据您的更新...我的第四个项目符号适用。 下面是关于创建一个堆经理NUMA架构(在文章的结尾源代码)很好看的:
http://ebookbrowse.com/numa-aware-heap-memory-manager-article-final-pdf-d12526838