Advertisement
Guest User

Untitled

a guest
Sep 21st, 2014
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.67 KB | None | 0 0
  1. /* free: put block ap in free list */
  2. void free(void *ap)
  3. {
  4. Header *bp, *p;
  5.  
  6. bp = (Header *)ap - 1; /* point to block header */
  7. for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr)
  8. if (p >= p->s.ptr && (bp > p || bp < p->s.ptr))
  9. break; /* freed block at start or end of arena */
  10.  
  11. if (bp + bp->s.size == p->s.ptr) { /* join to upper nbr */
  12. bp->s.size += p->s.ptr->s.size;
  13. bp->s.ptr = p->s.ptr->s.ptr;
  14. } else
  15. bp->s.ptr = p->s.ptr;
  16. if (p + p->s.size == bp) { /* join to lower nbr */
  17. p->s.size += bp->s.size;
  18. p->s.ptr = bp->s.ptr;
  19. } else
  20. p->s.ptr = bp;
  21. freep = p;
  22. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement