/* * File: rmemfix.c - memory managemnt functions for fixed regions * Contents: initalloc, reclaim */ /* * Prototype. */ hidden novalue reclaim Params((int region)); /* * initalloc - initialization routine to allocate memory regions */ novalue initalloc(codesize) word codesize; { static char dummy[1]; /* dummy static region */ /* * Allocate icode region */ if ((code = (char *)AllocReg(codesize)) == NULL) error("insufficient memory for icode"); /* * Set up allocated memory. The regions are: * Static memory region (not used) * Allocated string region * Allocate block region * Qualifier list */ statend = statfree = statbase = dummy; if ((strfree = strbase = (char *)AllocReg(ssize)) == NULL) error("insufficient memory for string region"); strend = strbase + ssize; if ((blkfree = blkbase = (char *)AllocReg(abrsize)) == NULL) error("insufficient memory for block region"); blkend = blkbase + abrsize; if ((quallist = (dptr *)AllocReg(qualsize)) == NULL) error("insufficient memory qualifier list"); equallist = (dptr *)((char *)quallist + qualsize); } /* * reclaim - reclaim space in the allocated memory regions. The marking * phase has already been completed. */ static novalue reclaim(region) int region; { /* * Collect available co-expression blocks. */ cofree(); /* * Collect the string space leaving it where it is. */ if (!qualfail) scollect((word)0); /* * Adjust the blocks in the block region in place. */ adjust(blkbase,blkbase); /* * Compact the block region. */ compact(blkbase); }