Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void sal_free(void *object)
- {
- assert(object != NULL);
- // access header
- free_header_t *curr = (void *)(object - HEADER_SIZE);
- vaddr_t chosen_ptr = (void *)(object) - (void *)(memory) - HEADER_SIZE;
- // validate header
- if(curr->magic != MAGIC_ALLOC) {
- if(curr->magic != MAGIC_FREE) {
- fprintf(stderr, " memory corruption(sf0). aborting operation\n");
- sal_stats();
- abort();
- } else if(curr->magic == MAGIC_FREE) {
- fprintf(stderr, " memory already free...");
- return;
- }
- }
- assert(curr->magic == MAGIC_ALLOC);
- // FREE DA MEMORY!!!!
- free_header_t *temp = (void *)(memory + free_list_ptr);
- if(temp->magic != MAGIC_FREE) {
- // just freed the only free mem block.
- free_list_ptr = chosen_ptr;
- curr->next = chosen_ptr;
- curr->prev = chosen_ptr;
- fprintf(stdout, " >> freed memory size %d at offset %d\n"
- " no merging required\n",
- curr->size, chosen_ptr);
- curr->magic = MAGIC_FREE;
- return;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement