Malloc哈希表的所有可用内存

时间:2013-03-11 05:07:35

标签: c memory-management malloc hashtable

我想在机器上构造一个尽可能大的哈希表。我想在初始化时我会声称一大块内存供哈希表使用,但我不清楚最好的方法是什么。我有各种各样的想法和问题,如下所示。 Stack Overflow上有很多相关的帖子,但我仍然很感激你的想法。

假设我有16GiB的RAM可供使用。

  1. 只需选择一个像8GiB这样的数字并总是分配那么多,并希望系统的其余部分可以完成其余的工作。如果我选择这样做,那么获得8GiB的最佳方式是什么?它是一个64位系统,因此我可以调用malloc(1<<33)它可能会起作用,但这足够大以至于我认为碎片可能是一个问题。那么我最好分配8个独立的1GiB块吗?

  2. 我不想选择一个号码,而是要声明所有/大部分剩余的物理内存。我天真以为我可以调用malloc直到它返回NULL,但乐观的内存分配使它非常无益(似乎让我也分配了我的所有硬盘)。像topvmstat这样的工具让我查询内存使用情况,我可以使用系统调用来获取相同的信息吗?

  3. 我是否只为了这个目的而想要物理记忆?我之前从未使用mmap,我是否应该考虑构建一个巨大的哈希表?我的直觉是整个表格的随机访问对mmap不利。

  4. 任何帮助都会很棒!

1 个答案:

答案 0 :(得分:-2)

即使你的系统中有足够的内存,8GB也是使用malloc分配的大内存。

我建议你在这里使用分页和分裂概念。

最初使用malloc分配256MB内存,现在将这256MB分成4K块,并为每个块分配唯一的页面索引,以便您可以使用唯一页面索引访问它。

当页面变满时,条目拆分页面并为具有不同页面索引的新页面分配另一个4k块。继续这样做,而不是一次分配所有内存。