1

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

例如,想象一下这样的场景:我们必须处理一棵巨大的树。这棵树不适合记忆。使用压缩分配器,我们几乎可以适应任何树。

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

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

或者也许它是如此复杂/缓慢(甚至与节省的内存相比)根本不值得?虚拟内存和交换可能非常慢,尤其是在垃圾收集环境中。最近一个 1 gb 的应用程序使整个操作系统无响应......所以内核级机制不一定有效。

你可以把它想象成(我仍然试图向你保证这不是一个非常愚蠢的想法)作为反对快速用户模式 ​​futexes 与慢速本机互斥锁,快速用户模式绿色线程(如在 Erlang 中具有多达 2000 万个同时进程)机器)与较慢的本机线程等。

4

1 回答 1

0

有关压缩虚拟内存的一些相关想法,请参阅虚拟内存系统中的压缩缓存案例。这个想法有一个 Linux 实现(compcache)。

在分配器中进行压缩甚至没有意义。分配器的工作是返回我要求它分配多少字节(并避免堆碎片和所有其他爵士乐)。它不知道我将在该内存中放入什么数据。如果内存真的很紧,那么应用程序应该执行内存压缩。

可以通过此处记录的Redis使用的巧妙技巧看到内存压缩的一个很好的示例。

于 2011-06-02T21:57:38.050 回答