Advertisement
Guest User

Untitled

a guest
Nov 14th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.89 KB | None | 0 0
  1. void *mm_malloc(size_t size)
  2. {
  3.     int newsize = ALIGN(size + SIZE_T_SIZE);
  4.     void *p;
  5.  
  6.     if(findFree(newsize) == (void*) -1) // try to find available slot
  7.         p = mem_sbrk(newsize); // increase heap cause not found
  8.     else
  9.         p = findFree(newsize);
  10.  
  11.     if (p == (void *)-1)
  12.         return NULL;
  13.     else{
  14.         *(size_t *)p = size;
  15.         PUT((void *)((char *)p + SIZE_T_SIZE),size);
  16.         mm_check();
  17.         return (void *)((char *)p + SIZE_T_SIZE);
  18.         }
  19.  
  20. }
  21.  
  22. /*
  23.  *Returns pointer to first available block
  24.  */
  25. void *findFree(size_t size){
  26.     int *next = mem_heap_lo();
  27.     while(!isFree(next) && GET_SIZE(next) > size && next > mem_heap_hi()){ // maybe should be == heap_hi
  28.         next = NEXT_BLKP(next);
  29.     }
  30.     if(isFree(next)){
  31.         return next; // return free
  32.     }
  33.     else{
  34.         // no available spot
  35.     }
  36.     return (void*) -1;
  37. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement