【发布时间】:2013-07-25 12:55:16
【问题描述】:
问题如下:我有一定数量的单词(比如说20M),每个单词都包含一些用作标志的位;全部存储在单个连续的二进制文件中。
我想做的是以 container like 样式访问这些单词,因此 container_instance[i] 允许我访问 i-th 单词。为了让事情变得更复杂,我不能一次将所有单词存储在内存中,它们必须存储回文件并为那些长期不使用的单词释放内存。为了简化事情,整个序列被划分为 1K 个片段,所以我们需要释放和分配这样的 1K 个块。内存应该在一段时间或容器被访问一定次数后被释放。
很高兴拥有线程安全。但我可以在外部保护。
我目前的实现只按需分配块(如果可用,则为空或从文件中读取;文件不是稀疏的,因此文件中最后一个字节之后的所有内容都分配为空)并且做得不好。根本不释放,所以未使用的块永远保留在内存中。
我开始考虑美观的解决方案,我想知道是否有任何来自 STL 或 Boosts 的元素可以帮助我构建这样的容器,而不是从头开始逐步雕刻它?
我并不期待完整的解决方案,而是指出“您可以将 that 用于 that”。
【问题讨论】:
-
boost是一个帮助:他们构建迭代器的东西(如fascade)将帮助您创建随机访问迭代器。 -
使用 64 位系统和
mmap。完毕。读=页入,空闲=页出。你无法击败与 CPU 一起工作的操作系统。 -
我不能使用
mmap(),因为我必须通过包装器访问文件,因为代码不能依赖于 POSIX 或任何其他操作系统的东西。它就像嵌入式代码。