Mercury 程序的基于区域的内存管理

摘要:区域基础内存管理(RBMM)是一种编译时内存管理的形式,来自于函数式编程世界中被广泛知晓的。在本文中,我们描述了我们在逻辑编程语言Mercury中实现RBMM的工作。Mercury有一个有趣的地方,那就是它设计了强类型、模式和确定性系统。这些系统不仅为Mercury程序员提供了一些直接的软件工程优势,比如自说明代码和清晰的程序逻辑,也为语言实现者提供了大量有用于程序分析的信息。在这项工作中,我们利用这些信息来开发程序分析,以确定数据分布到哪些区域,并通过插入必要的区域操作来转换Mercury程序。我们证明了我们的程序分析和转换的正确性。为了执行带有注解的程序,我们实现了运行时支持,解决了回溯带来的两个主要挑战。首先,回溯可能需要在正向执行期间删除的区域“复活”;其次,对于回溯的计算中分配的任何内存,必须及时且无需等待相关区域的结束来进行恢复。我们详细描述了如何解决这两个问题。我们详细研究了我们的RBMM系统在一些基准程序中的性能表现,包括一些对RBMM来说困难的著名案例。即使对于这些困难的案例,我们启用RBMM的Mercury系统与其带有Boehm运行时垃圾收集器的基本系统相比,在18个基准测试中有15个的运行时间更快,平均运行时间提升了24%,平均内存需求减少了95%。事实上,在一些程序中,我们的系统实现了最佳的内存消耗。

作者:Quan Phan, Gerda Janssens and Zoltan Somogyi

论文ID:1203.1392

分类:Programming Languages

分类简称:cs.PL

提交时间:2012-03-08

PDF 下载: 英文版 中文版pdf翻译中