예제 #1
0
void mydeallocate(void *ptr, char FILE[],int LINE,int type) {
  if (!ptr) {
    return;
  }

  // TODO: consider merging blocks once splitting blocks is implemented.
  struct block_meta* block_ptr = get_block_ptr(ptr);
  assert(block_ptr->free == 0);
  block_ptr->free = 1;
}
예제 #2
0
파일: malloc.c 프로젝트: mmaydaniuk/cxcomm
void 
free(char *ptr) {
  if (!ptr) {
    return;
  }

  // TODO: merge blocks
  struct malloc_chunk* block_ptr = get_block_ptr(ptr);

  block_ptr->is_free = 1;
  
}
예제 #3
0
void mm_free(void *ptr) {
	if (ptr != NULL) {
		struct metadata *curr = get_block_ptr(ptr);
		curr->free = 1;
		if (curr->prev && curr->prev->free) {
			curr = coalesce(curr->prev);
		}
		if (curr->next && curr->next->free) {
			coalesce(curr);
		}
	}
}
예제 #4
0
void *mm_realloc(void *ptr, size_t size) {
	if (!ptr) {
		return mm_malloc(size);
	} else {
		if (size == 0) {
			return NULL;
		} 
		struct metadata *block = get_block_ptr(ptr);
		mm_free(ptr);
		void *valid = mm_malloc(size);
		if (!valid) {
			return NULL;
		}
		if (size < block->size) {
			memcpy(valid, ptr, size);
		} else {
			memcpy(valid, ptr, block->size);
		}
		return valid;
	}
}