使用页面文件进行缓存?

Dir*_*eld 1 c++ caching virtual-memory

我必须处理通常不适合主内存的大量数据.我访问这些数据的方式具有很高的局部性,因此在内存中缓存部分内容看起来是个不错的选择.将malloc()作为一个庞大的数组是否可行,并让操作系统找出要分页的位和要保留的位数?

Jer*_*fin 6

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

内存映射文件只是创建一些地址空间并将其直接映射到原始文件.这样可以避免将数据从原始文件复制到页面文件(并在完成后再次返回),以及在从原始文件到页面文件的过程中临时将数据移动到物理内存中.当然,最大的胜利是当原始文件的大部分内容从未真正使用时(在这种情况下,它们可能永远不会被读入物理内存,假设未使用的块至少是一页在尺寸方面).