I m currently working on a generational garbage collector. This means that only the most recent objects get traversed, surviving objects (= reachable from known roots) being promoted to the older generation. This works OK when objects point to other objects of the same or older generations. However, when older objects point to newer ones, and since only newer objects get traversed, the pointed objects would be incorrectly collected. To avoid this, such objects are marked and traversed explicitly during each GC phase.
显然,这种“表面”物体是可变的,因为通过建造不可变的物体总是指现有物体。 因此,为了成为“父母”,必须经过推广后修改物体,以便标明新物体。
为了了解几代人的目标对年轻一代的影响,我正在寻找一种方法,以透明方式监测记忆的变化。 为此,我利用记忆保护和信号/例外处理。 只读存储页,每当书写时,就会发出信号/例外,在这种情况下,我把记忆保护重新定在读物上,将地址排在另一处,以供进一步处理,而如果返回,则负责例外的代码通常会恢复。 这样,当GC触发点时,我知道在什么地方寻找潜在的父母来规避。
Onlav 我使用混合式/SIGSEGV信号处理。 在Windows I, 打算使用虚拟保护,但发现无等同SIGSEGV处理。 因此,我的问题是:
如何在Windows上做到这一点? 处理APIC的例外情况似乎令人困惑。
Is there a better way to know which memory areas get modified, so that I don t have to do all this bookkeeping?
我的法典是用C型号写成的。 目前,我要求打电话的人代码明确标明经修改的物体,但这种标记是虚幻的,容易发生错误,因此我 m想以透明的方式这样做。
预收