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; }
void free(char *ptr) { if (!ptr) { return; } // TODO: merge blocks struct malloc_chunk* block_ptr = get_block_ptr(ptr); block_ptr->is_free = 1; }
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); } } }
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; } }