>>195

char* heap[SIZE_HEAP];
char* currentp = heap + SIZE_HEAP;

enum tag_t {
TAG_INT, ...
};

#define ALLOC_CELL(x) (currentp -= (x << TAGBITS))
#define BIND_TAG(p, id) (p |= TAG_INT & TAGMASK)

obj* make_int(int x)
{
int* p = ALLOC_CELL(1);
BIND_TAG(p, TAG_INT);
*p = x;
return (obj*)p;
}

こういうことじゃない?