3

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

假设我有 16GiB 的 RAM 可以玩。

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

  2. 而不是选择一个数字,我只想要求所有/大部分剩余的物理内存。我天真地以为我可以一直调用malloc直到它返回NULL,但是乐观的内存分配使它非常无用(它似乎也让我分配了我所有的硬盘驱动器)。像让我查询内存使用情况这样的实用程序topvmstat是否有系统调用可以用来获取相同的信息?

  3. 我只需要为此目的的物理内存是否正确?我以前从未使用mmap过,我应该考虑将它用于构建一个巨大的哈希表吗?我的直觉是,对整个表的随机访问对mmap.

任何帮助都会很棒!

4

1 回答 1

-2

即使您的系统中有足够的 RAM,8GB 仍然是使用 malloc 分配的大内存。

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

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

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

于 2013-03-11T06:46:01.013 回答