c++ - 使用页面文件进行缓存?

标签 c++ caching virtual-memory

我必须处理通常无法放入主内存的大量数据。我访问此数据的方式具有很高的局部性,因此将部分数据缓存在内存中看起来是个不错的选择。仅 malloc() 一个巨大的数组,并让操作系统确定哪些位要分页,哪些位要保留是否可行?

最佳答案

假设数据来自一个文件,你最好对那个文件进行内存映射。否则,您最终要做的是分配您的数组,然后将数据从您的文件复制到数组中——并且由于您的数组映射到页面文件,您基本上只是将原始文件复制到页面文件,并在此过程中污染“缓存”(即物理内存),因此当前事件的其他数据更有可能被驱逐。然后,完成后(通常)将数据从数组写回原始文件,这(在这种情况下)意味着从页面文件复制回原始文件。

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

关于c++ - 使用页面文件进行缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3756144/

相关文章:

linux - 遗留的 gcc 编译器问题

linux - 为什么映射值的物理地址始终为零?

c++ - 宏不通过直接调用扩展,而是通过间接调用扩展

c# - 编译一个dlib的.dll文件

caching - 对CMake的缓存变量设置优先级感到困惑

hibernate - 从 ehcache 加载 hibernate 对象时出现延迟初始化异常

c++ - WM_MBUTTONDOWN 不起作用

c++ - boost::fusion 的编译时间与运行时间

.net - 创建您自己的 .NET 程序集缓存

x86 - 分页和 PIC 可执行文件