我想在机器上构造一个尽可能大的哈希表。我想在初始化时我会声称一大块内存供哈希表使用,但我不清楚最好的方法是什么。我有各种各样的想法和问题,如下所示。 Stack Overflow上有很多相关的帖子,但我仍然很感激你的想法。
假设我有16GiB的RAM可供使用。
只需选择一个像8GiB这样的数字并总是分配那么多,并希望系统的其余部分可以完成其余的工作。如果我选择这样做,那么获得8GiB的最佳方式是什么?它是一个64位系统,因此我可以调用malloc(1<<33)
它可能会起作用,但这足够大以至于我认为碎片可能是一个问题。那么我最好分配8个独立的1GiB块吗?
我不想选择一个号码,而是要声明所有/大部分剩余的物理内存。我天真以为我可以调用malloc
直到它返回NULL
,但乐观的内存分配使它非常无益(似乎让我也分配了我的所有硬盘)。像top
和vmstat
这样的工具让我查询内存使用情况,我可以使用系统调用来获取相同的信息吗?
我是否只为了这个目的而想要物理记忆?我之前从未使用mmap
,我是否应该考虑构建一个巨大的哈希表?我的直觉是整个表格的随机访问对mmap
不利。
任何帮助都会很棒!
答案 0 :(得分:-2)
即使你的系统中有足够的内存,8GB也是使用malloc分配的大内存。
我建议你在这里使用分页和分裂概念。
最初使用malloc分配256MB内存,现在将这256MB分成4K块,并为每个块分配唯一的页面索引,以便您可以使用唯一页面索引访问它。
当页面变满时,条目拆分页面并为具有不同页面索引的新页面分配另一个4k块。继续这样做,而不是一次分配所有内存。