我必须处理通常不适合主内存的大量数据。我访问此数据的方式具有很高的位置,因此在内存中将其缓存部分看起来是一个不错的选择。仅Malloc()一个巨大的阵列可行,然后让操作系统弄清楚要分钟哪些位以及保留哪些位?

有帮助吗?

解决方案

假设数据来自文件,最好选择该文件的内存映射。否则,您最终要做的是分配数组,然后将数据从文件复制到数组中 - 并且由于您的数组已映射到页面文件,因此您基本上只是将原始文件复制到页面文件,在此过程中,污染“缓存”(即物理内存),因此当前活动的其他数据有更好的机会被驱逐出去。然后,(通常)完成后,将数据从数组中写回原始文件,这(在这种情况下)意味着从页面文件复制回原始文件。

内存映射文件只是创建一些地址空间,然后将其直接映射到原始文件。这避免了将数据从原始文件复制到页面文件(完成后再次返回),并在从原始文件到页面文件的途中临时将数据移至物理内存中。当然,最大的胜利是/如果您根本没有真正使用的原始文件中有大量的片段(在这种情况下,它们可能永远不会被读成物理记忆,假设未使用的块至少是一页在尺寸方面)。

其他提示

如果数据在大文件中,请查看使用MMAP读取它。现代计算机有太多的RAM,您可能没有足够的交换空间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top