【发布时间】:2012-02-24 23:14:46
【问题描述】:
我正在做我的计算机科学项目。我正在使用 C 进行多处理器编程。对我们的一个要求是,我们不能一直分配小块内存。需要时可以大块分配内存。
假设我在我的程序中使用结构。而且我的程序的工作方式需要动态内存分配。但它在我们使用的硬件中非常昂贵。所以最好的解决方案是在开始时分配一个大的内存池,并在需要时从这个池中分配内存。
我设想它的工作方式是,我将分配这些结构的位数组并编写我自己的内存管理模块,该模块从该池中分配和释放内存。但我想知道编写这些模块的最理想方式。是否有任何库可以帮助我管理内存,或者有什么方法可以编写这些库?
编辑:这是我使用的平台:运行 Ubuntu 的 AMD opteron 系统。 opterons 具有 NUMA 架构,我想在分配内存时利用它。因此,我没有使用 malloc,而是使用 numa_alloc_onnode 在一个特定节点上分配内存。我想使用它分配一大块内存,然后使用内存管理器来管理这块内存。
【问题讨论】:
-
我确信有一些库会有所帮助,但如果不了解平台和操作系统,任何人都很难推荐一个。
-
@Carey:我使用过的大多数内存管理系统都与平台无关(在 C 可用的地方运行),尽管知道特定的系统约束,例如嵌入式系统当然很重要。
-
@Eric:嵌入式系统是我提到它的原因。 OP 似乎暗示他正在使用一个不寻常的平台,这可能意味着一个不寻常的操作系统,或者根本没有操作系统。
-
查看空闲列表的工作原理。有一些方法可以在存储本身内部实现它们,没有空间开销(尽管有一些分配的搜索开销)。
标签: c memory-management ubuntu numa