uintptr_t *MJC_allocArray(int32_t elements, int32_t element_size) { // size request was # bytes - convert to words int32_t size = WORDSIZE(elements * element_size); if (size < 0) { die_w_msg("Negative array size request"); } #ifdef DEBUG_ALLOC printf("MJC alloc array: num elements %d, size %d bytes (%d words)\n", elements, element_size, (int)WORDSIZE(element_size)); #endif // array header includes type and size uintptr_t *a = heapalloc(size + OBJ_HEADER_SIZE) + OBJ_HEADER_SIZE; // store the marker "ARRAY" to indicate an array object a[-OBJ_HEADER_TYPE_OFFSET] = (uintptr_t)(ARRAY_HEADER_TYPE); a[-OBJ_HEADER_SIZE_OFFSET] = size; // initialize remaining alloc space to 0 memset(a, 0, size * sizeof(uintptr_t)); return a; }
sSLList *sll_createExtern(fNodeAlloc falloc,fNodeFree ffree) { sList *l = (sList*)heapalloc(sizeof(sList)); if(l == NULL) return NULL; sll_init((sSLList*)l,falloc,ffree); return (sSLList*)l; }
sSLList *sll_create(void) { sList *l = (sList*)heapalloc(sizeof(sList)); if(l == NULL) return NULL; sll_init((sSLList*)l,(fNodeAlloc)nodealloc,(fNodeFree)nodefree); return (sSLList*)l; }
uintptr_t *MJC_allocObject(size_t size) { #ifdef DEBUG_ALLOC printf("MJC alloc object size %zu bytes (%zu words)\n", size, WORDSIZE(size)); #endif // size request was # bytes - convert to words size = WORDSIZE(size); uintptr_t *obj = heapalloc(size + OBJ_HEADER_SIZE) + OBJ_HEADER_SIZE; // store a class type into the header for later use obj[-OBJ_HEADER_TYPE_OFFSET] = (uintptr_t)(OBJECT_HEADER_TYPE); obj[-OBJ_HEADER_SIZE_OFFSET] = size; // initialize remaining alloc space to 0 memset(obj, 0, size * sizeof(uintptr_t)); return obj; }