内存映射内存是否可行?

时间:2013-06-10 21:04:14

标签: c++ c memory compression memory-mapped-files

我知道可以使用内存映射文件,即磁盘上透明映射到内存的真实文件。据我所知(我还没有使用过这些),映射立即发生,文件在第一次内存访问时被部分读取,而操作系统开始在后台“缓存”整个文件。

现在:有可能在某种程度上滥用这个概念并将内存映射到另一块内存中吗?假设OS提供了这样的间接,可以创建一种compressed_malloc(),它返回从内存到内存的映射。返回给调用者的内存很简单,内存映射范围在内存中透明压缩,最终保存在内存中。因此,对于大型缓冲区,可能只有部分缓冲区在运行时(访问时)进行解压缩,而其余块则保持压缩状态。

这个概念目前在技术上是否可行,或者 - 如果已经实现(在软件中) - 有什么需要注意的?

更新1:我或多或少地寻找技术上可实现的东西,而无需修改操作系统内核本身或需要虚拟化平台。

更新2:我希望能够在我自己的用户空间代码中实现压缩和相关逻辑。我只想使用操作系统的工具来创建内存映射。

2 个答案:

答案 0 :(得分:2)

非常如此。 VM(虚拟内存)系统旨在处理可映射的不同类型的对象。事实上,文件系统调用cramfs在保存压缩数据的意义上做了类似的事情,但是实现了透明的,未压缩的访问。

您本身不会修改内核,但您必须在内核空间中工作,为这种新的内存映射对象实现VM处理程序。

答案 1 :(得分:1)

这是可能的,例如。 http://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp?topic=/com.vmware.vsphere.resourcemanagement.doc_41/managing_memory_resources/c_memory_compression.html

在Linux的内核空间中没有正确实现,但是这样的东西可以在用户空间中实现。