如何在纯C中管理虚拟机的数据结构和堆的内存

如何在纯C中管理虚拟机的数据结构和堆的内存,c,memory-management,interpreter,C,Memory Management,Interpreter,在我的解释器中,我需要管理它的运行时对象及其内部数据结构 我想创建一个解释器,其中解释器数据结构(堆栈、符号表)和用户创建的对象之间没有区别。我在《小闲聊》中第一次看到这一点 这样,相对于托管堆中的解释器结构而言,解释器看起来就像一台小型的真正的机器,并且所有解释器结构都是相同类型的(比如vonneumann架构)。我认为这是编写口译员最酷、最激动人心的方式 但我想做一些不同的事情,像通常那样,将托管对象创建为C结构,而不是数组。当我试图对堆进行垃圾收集或调整堆的大小时,就会出现C结构的问题。指

在我的解释器中,我需要管理它的运行时对象及其内部数据结构

我想创建一个解释器,其中解释器数据结构(堆栈、符号表)和用户创建的对象之间没有区别。我在《小闲聊》中第一次看到这一点

这样,相对于托管堆中的解释器结构而言,解释器看起来就像一台小型的真正的机器,并且所有解释器结构都是相同类型的(比如vonneumann架构)。我认为这是编写口译员最酷、最激动人心的方式

但我想做一些不同的事情,像通常那样,将托管对象创建为C结构,而不是数组。当我试图对堆进行垃圾收集或调整堆的大小时,就会出现C结构的问题。指针将无效


有人想出了如何使用指针来实现这一点?我知道这实际上是不可能的,但有人接近了它?

道格·李(Doug Lea)在1994年写了一些malloc实现的基础

您可以下载公共域源:

http://g.oswego.edu/dl/html/malloc.html

我对我的后记翻译也有类似的担忧。一些讨论

我绕过指针失效的方法是有两层寻址。虚拟地址,如果你愿意的话

主数据结构单独分配,并具有指向基址、最大分配大小和当前使用大小的指针。内存中地址为零的第一个地址表包含分配大小和基偏移量(整数或“游标”,当添加到基指针时,会产生一个指向数据的实际C指针)

由于解释器是无中断的,所以操作符函数不必担心指针在执行过程中会变得无效,因此从句柄(表索引,实际用户指针)获取指针的开销只需在获取指针后发生


它似乎在所有测试中都很有效。后来我挂断了电话,需要优化内部循环

对不起。我收集不到足够的信息来弄清楚你在问什么。我更抱歉!英语不是我的母语,有时当我用英语写作时,我会把我想写的东西弄得乱七八糟。得到+1!难道你不能对“程序堆”和“数据结构”都使用标准的
malloc
realloc
free
!也许你想要一个。。。对于C语言,我听一些人说内存池可能对你有帮助。池可以在单个函数调用中从内存中擦除。一些c库实现了它。谢谢Jim,你的帮助和我们朋友的帮助是无价的+1.