【发布时间】:2012-02-24 19:48:30
【问题描述】:
我现在有一个棘手的问题。我有一个大字典文件要加载到我的程序中,它的格式基本上是:
word1 val1
word2 val2
word3 val3
...
...
这个文件有 170k 行,它在磁盘上的大小是 3.9MB(纯文本)。在我的实现中,我使用 boost::unordered_map (hashtable) 来存储这些数据以支持我的程序中的只读查找操作。
然而,在运行时加载到内存后,由于加载操作,内存使用量增加了20MB(我通过windows Task中的Private Working Set Size检查了这一点经理,也许这不是确定内存使用情况的正确方法?)。我知道哈希表中肯定有一些辅助数据结构来存储那些会增加内存使用的数据,但是我没想到内存大小是磁盘大小的5倍!
这正常吗?由于我在 std 扩展库中尝试了另一个版本的 hashmap,并在其他一些内存中尝试了 Trie 结构,它们都没有在这个问题上带来显着的改进。
所以我想对这个问题进行一些空间优化。谁能提供一些提示或关键字来指导我提高空间使用率?
【问题讨论】:
-
您可以使用压缩后缀树来压缩您的数据。但是你到底想用这些数据做什么?这些 val 有多大?
-
在 Windows 上,20 MB 有问题吗?许多系统都有可用的 GB。
-
@BoPersson 是的,这是我现在需要解决的问题。