| plan 9 kernel history: overview | file list | diff list |
1992/0620/port/alloc.c (diff list | history)
| 1992/0619/sys/src/9/port/alloc.c:13,19 – 1992/0620/sys/src/9/port/alloc.c:13,19 (short | long | prev | next) | ||
| 1992/0619 | Maxpow = 16, Nhole = 128, Magichole = 0xDeadBabe, | |
| 1992/0620 | Magic2n = 0xFeedBeef, | |
| 1992/0618 | }; typedef struct Hole Hole; | |
| 1992/0619/sys/src/9/port/alloc.c:56,62 – 1992/0620/sys/src/9/port/alloc.c:56,63 | ||
| 1992/0619 | struct Arena { Lock; | |
| 1992/0620 | Bucket *btab[Maxpow]; int nbuck[Maxpow]; | |
| 1992/0619 | }; static Arena arena; | |
| 1992/0619/sys/src/9/port/alloc.c:226,250 – 1992/0620/sys/src/9/port/alloc.c:227,232 | ||
| 1992/0619 | unlock(&xlists); } | |
| 1992/0618 |
| |
| 1992/0619 |
| |
| 1992/0618 |
| |
| 1992/0619 |
| |
| 1992/0619/sys/src/9/port/alloc.c:251,257 – 1992/0620/sys/src/9/port/alloc.c:233,239 | ||
| 1992/0619 | int pow; Bucket *bp; | |
| 1992/0620 | for(pow = 3; pow < Maxpow; pow++) | |
| 1992/0619 | if(size <= (1<<pow)) goto good; | |
| 1992/0619/sys/src/9/port/alloc.c:272,277 – 1992/0620/sys/src/9/port/alloc.c:254,260 | ||
| 1992/0619 | memset(bp->data, 0, size); return bp->data; } | |
| 1992/0620 | arena.nbuck[pow]++; | |
| 1992/0619 | unlock(&arena); size = sizeof(Bucket)+(1<<pow); bp = xalloc(size); | |
| 1992/0619/sys/src/9/port/alloc.c:309,312 – 1992/0620/sys/src/9/port/alloc.c:292,323 | ||
| 1992/0619 | bp->next = *l; *l = bp; unlock(&arena); | |
| 1992/0620 | } void xsummary(void) { Hole *h; Bucket *k; int i, nfree; i = 0; for(h = xlists.flist; h; h = h->link) i++; print("%d holes free\n", i); i = 0; for(h = xlists.table; h; h = h->link) { print("%.8lux %.8lux %d\n", h->addr, h->top, h->size); i += h->size; } print("%d bytes free\n", i); for(i = 3; i < Maxpow; i++) { if(arena.btab[i] == 0 && arena.nbuck[i] == 0) continue; nfree = 0; for(k = arena.btab[i]; k; k = k->next) nfree++; print("%8d %4d %4d\n", 1<<i, arena.nbuck[i], nfree); } | |
| 1992/0618 | } | |