Advertisement
Guest User

Untitled

a guest
Aug 28th, 2014
234
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.13 KB | None | 0 0
  1. void sal_free(void *object)
  2. {
  3.     assert(object != NULL);
  4.    
  5.     // access header
  6.     free_header_t *curr = (void *)(object - HEADER_SIZE);
  7.     vaddr_t chosen_ptr = (void *)(object) - (void *)(memory) - HEADER_SIZE;
  8.    
  9.     // validate header
  10.     if(curr->magic != MAGIC_ALLOC) {
  11.         if(curr->magic != MAGIC_FREE) {
  12.             fprintf(stderr, "  memory corruption(sf0). aborting operation\n");
  13.             sal_stats();
  14.             abort();
  15.         } else if(curr->magic == MAGIC_FREE) {
  16.             fprintf(stderr, "  memory already free...");
  17.             return;
  18.         }
  19.     }
  20.     assert(curr->magic == MAGIC_ALLOC);
  21.    
  22.     // FREE DA MEMORY!!!!
  23.     free_header_t *temp = (void *)(memory + free_list_ptr);
  24.     if(temp->magic != MAGIC_FREE) {
  25.         // just freed the only free mem block.
  26.         free_list_ptr = chosen_ptr;
  27.         curr->next = chosen_ptr;
  28.         curr->prev = chosen_ptr;
  29.         fprintf(stdout, "  >> freed memory size %d at offset %d\n"
  30.                         "     no merging required\n",
  31.             curr->size, chosen_ptr);
  32.         curr->magic = MAGIC_FREE;
  33.         return;
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement