Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void *mm_malloc(size_t size)
- {
- int newsize = ALIGN(size + SIZE_T_SIZE);
- void *p;
- if(findFree(newsize) == (void*) -1) // try to find available slot
- p = mem_sbrk(newsize); // increase heap cause not found
- else
- p = findFree(newsize);
- if (p == (void *)-1)
- return NULL;
- else{
- *(size_t *)p = size;
- PUT((void *)((char *)p + SIZE_T_SIZE),size);
- mm_check();
- return (void *)((char *)p + SIZE_T_SIZE);
- }
- }
- /*
- *Returns pointer to first available block
- */
- void *findFree(size_t size){
- int *next = mem_heap_lo();
- while(!isFree(next) && GET_SIZE(next) > size && next > mem_heap_hi()){ // maybe should be == heap_hi
- next = NEXT_BLKP(next);
- }
- if(isFree(next)){
- return next; // return free
- }
- else{
- // no available spot
- }
- return (void*) -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement