0

问题如下:我有一定数量的单词(比如说20M),每个单词都包含一些用作标志的位;全部存储在单个连续的二进制文件中。

我想做的是以容器样式访问这些单词,因此container_instance[i]允许我访问第 i 个单词。为了让事情变得更复杂,我不能一次将所有单词存储在内存中,它们必须存储回文件并为那些长期不使用的单词释放内存。为了简化事情,整个序列被划分为 1K 个片段,所以我们需要释放和分配这样的 1K 个块。内存应该在一段时间或容器被访问一定次数后被释放。

很高兴拥有线程安全。但我可以在外部保护。

我目前的实现只按需分配块(如果可用,则为空或从文件中读取;文件不是稀疏的,因此文件中最后一个字节之后的所有内容都分配为空)并且做得不好。根本不释放,因此未使用的块永远保留在内存中。

我开始考虑漂亮的解决方案,我想知道 STL 或 Boosts 中的任何元素是否可以帮助我构建这样的容器,而不是从头开始逐步雕刻它?

我并不期待完整的解决方案,而是指出“您可以为此使用它

4

1 回答 1

0

您可以使用mmap系统调用将文件映射到内存中。您可以对该缓冲区使用指针算术,因此按索引访问并不麻烦。

映射页面是虚拟的并由内核管理,允许保存未使用的内存块并以对您透明的方式加载/刷新它们。此外,使用madvise可能会启用一些优化。

于 2013-07-25T13:07:20.470 回答