解释器中的手动vs GC内存管理,并使用malloc / free

问题描述 投票:2回答:1

来自具有25年编码经验的人提出的新手问题。

因此,请您在快速回答之前,继续阅读。 :)


我目前正在编写解释器(基本上是一个字节码堆栈虚拟机),用于我自己设计的编程语言。整个代码库都用C编写(用2-3种不同语言(从D到Nim的重写)后的代码)

  • 为什么我最终以C结尾?因为对我而言最重要的是性能并完全控制所有内容
  • 为什么我不早做?因为我担心我会在内存泄漏的海洋中迷路]

长话短说,我试图找出最佳方法,始终以最佳性能为目标。

我已经尝试过Boehm的GC。基本上,每当我分配内存时就使用GC_malloc(或GC_malloc_atomic),而每当我要释放它时都使用GC_free

这使我的口译员在我正在运行的多个基准测试中提高了10%的速度。

这让我感到困惑。

是因为Boehm的GC_free根本不执行任何操作(直到实际执行)?

现在,我决定关闭GC并手动完成所有操作。每个malloc都有其空闲空间,仅此而已。内存消耗下降了(我猜这是Boehm以前没有释放任何东西的原因)。但是性能也下降了。

因此,我决定尝试使用...不同的malloc。在这种情况下,为rpmalloc。并且性能再次提高。

我想念东西吗?

由于您可能对这个问题感到困惑:

  • 使用GC(例如Boehm的)在解释器中有意义吗?
  • 用不同的malloc进行实验有意义吗?就改善字节码解释器的性能而言>]
  • 在我的情况下,您还建议其他什么? (优化内存管理和内存分配)

[具有25年编码经验的人提出的新手问题。因此,请在快速回答之前继续阅读。 :)我目前正在编写解释器(基本上是字节码堆栈VM ...

c memory-management compiler-construction garbage-collection malloc
1个回答
0
投票

您的问题非常广泛,可能在本网站上接近非主题。

© www.soinside.com 2019 - 2024. All rights reserved.