| plan 9 kernel history: overview | file list | diff list |
1992/0612/port/malloc.c (diff list | history)
| 1992/0612/sys/src/9/port/malloc.c:4,10 – 1992/0618/sys/src/9/port/malloc.c:4,10 (short | long | prev | next) | ||
| 1992/0612 | enum { MAGIC = 0xDEADBABE, | |
| 1992/0618 | MAXPOW = 20 | |
| 1992/0612 | }; | |
| 1990/1210 | ||
| 1992/0612 | typedef struct Bucket Bucket; | |
| 1992/0612/sys/src/9/port/malloc.c:20,28 – 1992/0618/sys/src/9/port/malloc.c:20,27 | ||
| 1992/0612 | struct Arena | |
| 1990/1210 | { | |
| 1992/0612 | Lock; | |
| 1992/0618 | Bucket *btab[MAXPOW]; | |
| 1992/0612 | }; | |
| 1990/1210 | ||
| 1992/0612 | static Arena arena; #define datoff ((int)&((Bucket*)0)->data) | |
| 1990/1210 | ||
| 1992/0612/sys/src/9/port/malloc.c:32,45 – 1992/0618/sys/src/9/port/malloc.c:31,45 | ||
| 1992/0612 | int pow; Bucket *bp; | |
| 1990/1210 | ||
| 1992/0612 |
| |
| 1992/0618 | size += sizeof(Bucket); for(pow = 1; pow < MAXPOW; pow++) | |
| 1992/0612 | if(size <= (1<<pow)) goto good; | |
| 1990/1210 |
| |
| 1992/0612 |
| |
| 1992/0618 | return 0; | |
| 1992/0612 | good: | |
| 1992/0612/sys/src/9/port/malloc.c:47,53 – 1992/0618/sys/src/9/port/malloc.c:47,53 | ||
| 1992/0612 | arena.unlock(); | |
| 1990/1210 | ||
| 1992/0612 | if(bp->magic != 0) | |
| 1992/0618 | panic("malloc"); | |
| 1990/1210 | ||
| 1992/0612 | bp->magic = MAGIC; | |
| 1990/1210 | ||
| 1992/0612/sys/src/9/port/malloc.c:55,68 – 1992/0618/sys/src/9/port/malloc.c:55,67 | ||
| 1992/0612 | return bp->data; | |
| 1990/1210 | } | |
| 1992/0612 | unlock(&arena); | |
| 1992/0618 | ||
| 1992/0612 | size = sizeof(Bucket)+(1<<pow); | |
| 1992/0618 | bp = xbrk(size); | |
| 1992/0612 | if((int)bp < 0) return nil; | |
| 1990/1210 | ||
| 1992/0612 |
| |
| 1990/1210 | ||
| 1992/0618 | memset(bp->data, 0, size); | |
| 1992/0612 | return bp->data; | |
| 1990/1210 | } | |