3

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

4

2 回答 2

1

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

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

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

于 2012-02-13T21:34:11.130 回答
1

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

于 2012-02-13T21:35:41.130 回答