内存映射内存是否可能
Is memory-mapped memory possible?
我知道可以使用内存映射文件,即磁盘上的真实文件透明地映射到内存。据我所知(我还没有使用过这些),映射立即发生,文件在第一次内存访问时被部分读取,而操作系统开始在后台"缓存"整个文件。
现在:是否有可能滥用这个概念并将内存映射到另一块内存?假设操作系统提供了这种间接方式,我们可以创建一种compressed_malloc()
,它返回从内存到内存的映射。返回给调用者的内存很简单,即在内存中透明压缩并最终保存在内存中的内存映射范围。因此,对于大的缓冲区,有可能只对其中的一部分(在访问时)进行实时解压缩,而其余的块则保持压缩。
这个概念目前在技术上可行吗?或者——如果已经实现了(在软件中)——需要关注什么?
更新1:我或多或少在寻找一些技术上可以实现的东西,而不需要修改操作系统内核本身或需要虚拟化平台。
更新2:我希望有一些东西允许我在我自己的用户空间代码中实现压缩和相关逻辑。我只会使用操作系统的功能来创建内存映射。
确实如此。VM(虚拟内存)系统被设计用来处理可以映射的不同类型的对象。实际上,有一个叫做cramfs的文件系统,它做了类似的事情,它将压缩的数据保存在存储中,但支持透明的、未压缩的访问。
您不需要修改内核本身,但是您必须在内核空间中工作,为这种新的内存映射对象实现VM处理程序。
这是可能的,例如: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的内核空间中不能正确地实现,但是在用户空间中可以实现类似的功能。
- 我在 IDA 或 dbg 或 olly 上看到的内存是否与我在 RAM 上实时加载的内存相同?
- 访问"std::vector"的保留但未调整大小的内存作为原始内存是否安全?
- 本地分配的内存是否可以用于将来使用?
- 多次分配内存是否一次性需要更多时间?
- 删除矢量的尾部(通过擦除)内存是否有效
- 如何找出内存是否属于堆或堆栈
- C++:提升:托管共享内存是否需要信号量锁
- 在 C/C++ 中在特定地址边界上对齐内存是否仍能提高 x86 性能?
- 检查内存是否在堆上
- C++内存 - 是否需要删除使用 'new' 创建的基元类型变量?
- 如果通过委托给“malloc”的重载“new[]”分配,“释放”内存是否安全
- 分配给 cpp 中定义的全局静态变量的内存是否在 C++ 中删除其类的实例后释放
- 我的 265GB RAM 笔记本电脑上的内存是否超过 8GB
- 在动态内存分配中,在程序终止并且忘记释放内存后,该内存是否保持分配状态
- 这些二维数组(C++)的内存是否不足
- 如果我在 for 中声明一个对象,它的内存是否会在那之后被释放?
- 二进制搜索树(如何在插入时检查内存是否不足)
- 用new重新分配内存是否安全
- 在构造函数初始化列表中分配内存是否存在任何问题
- 内存映射内存是否可能