内存压缩分配器

问题描述:

我想知道,有没有项目/至少一些关于内存压缩和内存分配器组合的研究(当然是牺牲一些速度)?内存压缩分配器

例如,假设场景:我们必须处理一棵巨大的树。这棵树不适合记忆。通过压缩分配器,我们可以适应任何树。

当然,可以使用迭代方法而无需一次构建树,但我的问题纯粹是理论上的(今天)。

可能的解引用将需要特殊的宏/模板,以便分配器能够解压缩选定的区域。但是如果一个地区参考另一个地区等呢?必须有一些非常复杂的算法,可能只在托管语言中解析(但Boehm能够为C++制作GC)。

或者它可能太复杂/慢(即使与保存的内存相比)在所有? 虚拟内存&交换可能非常缓慢,特别是在垃圾收集环境中。最近一个1 GB的应用程序使整个操作系统无响应...因此,内核级别的机制不一定高效。

你可以想到它(我仍然试图向你保证这不是一个非常愚蠢的想法),因为反对式快速用户模式futexes与慢速本地互斥,快速用户模式绿色线程(如Erlang中高达2000万机器上的同步过程)与较慢的原生线程等。

请参阅The Case for Compressed Caching in Virtual Memory Systems了解有关压缩虚拟内存的一些相关概念。这个想法有一个Linux实现(compcache)。

我不是很有意义在分配器中进行压缩。分配器的工作是回馈我分配多少个字节(并避免堆碎片和所有其他爵士)。它不知道我将要存入哪些数据。如果内存非常紧张,那么内存压缩应该由应用程序执行。

内存压缩的一个很好的例子可以通过使用文档here的巧妙技巧Redis来看出。