This module contains a minimal garbage collector implementation according to
published requirements. This library is mostly intended to serve as an
example, but it is usable in applications which do not rely on a garbage
collector to clean up memory (ie. when dynamic array resizing is not used,
and all memory allocated with 'new' is freed deterministically with
'delete').
Please note that block attribute data must be tracked, or at a minimum, the
FINALIZE bit must be tracked for any allocated memory block because calling
rt_finalize on a non-object block can result in an access violation. In the
allocator below, this tracking is done via a leading uint bitmask. A real
allocator may do better to store this data separately, similar to the basic
GC.
This module contains a minimal garbage collector implementation according to published requirements. This library is mostly intended to serve as an example, but it is usable in applications which do not rely on a garbage collector to clean up memory (ie. when dynamic array resizing is not used, and all memory allocated with 'new' is freed deterministically with 'delete').
Please note that block attribute data must be tracked, or at a minimum, the FINALIZE bit must be tracked for any allocated memory block because calling rt_finalize on a non-object block can result in an access violation. In the allocator below, this tracking is done via a leading uint bitmask. A real allocator may do better to store this data separately, similar to the basic GC.