【发布时间】:2015-12-19 22:02:58
【问题描述】:
我很想知道是否有办法在 Linux、OS X 或 Windows 等常见操作系统的用户空间中分配“弱”内存(显然,标准接口不可能)。我的意思是那种mmap(),如果操作系统选择将页面推出核心,这将使映射无效。
假设,我想在 32 位系统上使用 10G 数据集。为了从这个数据集中得到一个片段,我从文件中读取它并将它解压缩到内存 [.如果可能的话,我宁愿保留这些片段的解压缩版本,以避免在每次访问时解压缩数据,但为了允许访问所有片段,我最终必须释放一些数据以避免耗尽内存/地址空间。
如果malloc() NULLs out,我可以通过在malloc() 上粘贴一个框架来模拟这一点,但它会剥夺其他进程的内存并使它们页出(或页出解压片)。或者,我可以在应用程序中保留一些软限制,但这似乎是任意的,只能缓解问题,如果周围有可用内存,则不是最佳的。我觉得这是现代操作系统中的虚拟内存管理器应该处理的事情。
感谢任何有关如何在其他现代应用程序中解决此问题的提示和信息。
【问题讨论】:
-
你的意思是要建一个缓存系统?
-
我更愿意利用已经内置在操作系统中的缓存,可能使用特定于平台的系统调用
-
这与每个现代操作系统已经进行的分页有何不同?
-
如果我正确理解分页的工作原理,在这种情况下,我绝不希望操作系统将我的页面保存到磁盘(并重新读取它们),而是向我发出它们已被丢弃的信号
-
解压缩原始数据可能比读取/写入未压缩页面更快(我已编辑问题以消除这种混淆)
标签: c caching memory memory-management virtual-memory