diff options
Diffstat (limited to 'umalloc.c')
-rw-r--r-- | umalloc.c | 40 |
1 files changed, 20 insertions, 20 deletions
@@ -3,7 +3,7 @@ #include "user.h" #include "param.h" -// Memory allocator by Kernighan and Ritchie, The C programming Language, +// Memory allocator by Kernighan and Ritchie, The C programming Language, // 2nd ed. Section 8.7. typedef long Align; @@ -26,16 +26,16 @@ free(void *ap) { Header *bp, *p; - bp = (Header *) ap - 1; - for (p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) - if (p >= p->s.ptr && (bp > p || bp < p->s.ptr)) + bp = (Header*) ap - 1; + for(p = freep; !(bp > p && bp < p->s.ptr); p = p->s.ptr) + if(p >= p->s.ptr && (bp > p || bp < p->s.ptr)) break; - if (bp + bp->s.size == p->s.ptr) { + if(bp + bp->s.size == p->s.ptr) { bp->s.size += p->s.ptr->s.size; bp->s.ptr = p->s.ptr->s.ptr; } else bp->s.ptr = p->s.ptr; - if (p + p->s.size == bp) { + if(p + p->s.size == bp) { p->s.size += bp->s.size; p->s.ptr = bp->s.ptr; } else @@ -43,37 +43,37 @@ free(void *ap) freep = p; } -static Header * +static Header* morecore(uint nu) { char *cp; Header *up; - - if (nu < PAGE) + + if(nu < PAGE) nu = PAGE; cp = sbrk(nu * sizeof(Header)); - if (cp == (char *) -1) + if(cp == (char*) -1) return 0; - up = (Header *) cp; + up = (Header*) cp; up->s.size = nu; - free((void *)(up + 1)); + free((void*)(up + 1)); return freep; } -void * +void* malloc(uint nbytes) { Header *p, *prevp; uint nunits; nunits = (nbytes + sizeof(Header) - 1)/sizeof(Header) + 1; - if ((prevp = freep) == 0) { + if((prevp = freep) == 0) { base.s.ptr = freep = prevp = &base; base.s.size = 0; } - for (p = prevp->s.ptr; ; prevp = p, p = p->s.ptr) { - if (p->s.size >= nunits) { - if (p->s.size == nunits) + for(p = prevp->s.ptr; ; prevp = p, p = p->s.ptr) { + if(p->s.size >= nunits) { + if(p->s.size == nunits) prevp->s.ptr = p->s.ptr; else { p->s.size -= nunits; @@ -81,10 +81,10 @@ malloc(uint nbytes) p->s.size = nunits; } freep = prevp; - return (void *) (p + 1); + return (void*) (p + 1); } - if (p == freep) - if ((p = morecore(nunits)) == 0) + if(p == freep) + if((p = morecore(nunits)) == 0) return 0; } } |