Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}