ZCTObject:
TYPE =
MACHINE
DEPENDENT
RECORD[
wp(0): LONG POINTER TO NHeaderP,
rp(2): LONG POINTER TO NHeaderP,
lastNP(4): LONG POINTER TO LONG POINTER,
pad(6: 0..14): [0 .. LAST[CARDINAL]/2],
markingDecrements(6: 15..15): BOOL,
residueMask(7):
CARDINAL,
unused1(8): ARRAY [0..wordsPerPage-8) OF WORD,
bsiToFreeList(wordsPerPage): BSIToFreeListObj,
unused2(wordsPerPage+
SIZE[BSIToFreeListObj]):
ARRAY [0..wordsPerPage-SIZE[BSIToFreeListObj]) OF WORD,
bsiToSize(2*wordsPerPage): BSIToSizeObj,
unused3(2*wordsPerPage+
SIZE[BSIToSizeObj]):
ARRAY [0..wordsPerPage-SIZE[BSIToSizeObj]) OF WORD,
sizeToBSI(3*wordsPerPage): SizeToBSIObj,
unused4(3*wordsPerPage+
SIZE[SizeToBSIObj]):
ARRAY [0..2*wordsPerPage-SIZE[SizeToBSIObj]) OF WORD
fosTable(5*wordsPerPage): FOSTableObject starts on a page bdry; integral # pages
];
rp points to the next zct entry to be examined by the collector. It might point to a zctBlock link.
rp is used only by the collector process; there are no critical sections required for it.
The last cell in each zctBlock contains either NIL or a pointer to the next zctBlock.
lastNP points to the cell (containing NIL) into which to put a pointer to the next (empty) zctBlock. lastNP is used to accelerate zct extension.
wp points either to the next zct entry into which to store an nhp or to a zctBlock link.
wp is used by client processes and by the collector process; critical sections are required.