基于文件的查找表

时间:2012-02-13 21:16:56

标签: c++ file-io lookup boost-interprocess

您需要一个10 ^ 10个4字节整数的数组作为查找表。将其加载到RAM将需要40GB,这是不可行的。初始化后,您永远不需要写入此数组。您需要从单个进程的多个线程同时读取此数组的随机位置中的各个整数值。您可以保证使用64位平台。这个查找表的最快实现是什么?使用常规文件读取功能或例如提升内存映射文件?

2 个答案:

答案 0 :(得分:1)

听起来你应该做明确的阅读。

内存映射的速度可以从一次引入大块页面(我相信Windows会运行256KiB,不确定其他平台)并允许您在第一次使用后重新访问它们而不会受到任何惩罚。

如果您只是从随机位置读取整数,那么您将在一页中仅读取4个字节的256KB,甚至可能永远不会重新访问它。太浪费了!还要考虑到您还从其他应用程序和文件系统缓存中分页了很多可能有用的数据。

答案 1 :(得分:1)

由于一旦创建了文件,您只需要以只读方式访问它,我不认为您需要花费内存映射文件,Boost或其他方式。如果您有多个要同时访问相同数据的进程,那将更有用。在你的情况下,你只有只读线程,所以一个简单的40g文件应该是最简单和最快的。