我想知道,是否有项目/至少一些关于内存压缩和内存分配器组合的研究(当然是以牺牲一些速度为代价)?
例如,想象一下场景:我们必须处理一棵巨大的树。这棵树不适合记忆。使用压缩分配器,我们可以适应任何树。
当然,人们可以在不构建树的情况下使用迭代方法,但我的问题纯粹是理论上的(今天)。
可能解除引用需要特殊的宏/模板,以便分配器能够解压缩所选区域。但是如果一个地区引用另一个地区等呢?必须有一些非常复杂的算法,可能只在托管语言中解决(但Boehm能够为C ++制作GC!)
或者它可能是如此复杂/缓慢(甚至与保存的记忆相比)根本不值得? 虚拟内存和交换可能非常慢,特别是在垃圾收集环境中。最近一个1 GB的应用程序让整个操作系统没有响应......所以内核级机制不一定有效。
你可以想到它(我仍然试图向你保证这不是一个非常愚蠢的想法),因为反对快速用户模式futexes与慢速本机互斥体,快速用户模式绿色线程(如Erlang中高达2000万同时)机器上的进程与较慢的本机线程等。
答案 0 :(得分:0)
有关压缩虚拟内存的一些相关提示,请参阅The Case for Compressed Caching in Virtual Memory Systems。这个想法有一个Linux实现(compcache)。
我在分配器中进行压缩甚至没有意义。分配器作业将返回我要求它分配多少字节(并避免堆碎片和所有其他爵士乐)。它不知道我将把什么数据放在那个内存中。如果内存非常紧张,那么应用程序应该执行内存中压缩。