如果我有一个char
长度为 80 亿的数组。将其分解为更小的数组会通过改进缓存来提高性能吗?基本上,我将迭代数组并进行一些比较。如果不是,那么使用这种长度的数组的最佳方式是什么。
我正在将二进制形式的文件读入数组,并将对文件的不同部分执行二进制比较。
如果我有一个char
长度为 80 亿的数组。将其分解为更小的数组会通过改进缓存来提高性能吗?基本上,我将迭代数组并进行一些比较。如果不是,那么使用这种长度的数组的最佳方式是什么。
我正在将二进制形式的文件读入数组,并将对文件的不同部分执行二进制比较。
如果你打算这样做一次,那么只需运行它。编程工作可能不值得花时间。
我假设你想一次又一次地这样做,这就是你想要优化它的原因。知道您的迭代和比较是否需要按顺序进行等肯定会有所帮助?如果没有一些问题域输入,很难在这里进行通用优化。
如果它可以并行完成并且您必须多次执行,我建议您查看 MapReduce 技术来解决这个问题。
8 GB 的数据将不可避免地破坏数据的局部性,因此您必须以一种或另一种方式来管理较小的内存,或者您的操作系统将执行虚拟内存的磁盘交换。
然而,还有一个替代方案——所谓的mmap
. 从本质上讲,这允许您将文件映射到虚拟内存空间,然后您的操作系统负责访问它并将必要的页面加载到 RAM 中,而您对该文件的访问只不过是一个简单的内存寻址。
mmap
阅读更多关于http://en.wikipedia.org/wiki/Mmap