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,101992/0618/sys/src/9/port/malloc.c:4,10 (short | long | prev | next)
1992/0612    
enum 
{ 
	MAGIC		= 0xDEADBABE, 
	MAX2SIZE	= 20 
1992/0618    
	MAXPOW		= 20 
1992/0612    
}; 
1990/1210    
 
1992/0612    
typedef struct Bucket Bucket; 
1992/0612/sys/src/9/port/malloc.c:20,281992/0618/sys/src/9/port/malloc.c:20,27
1992/0612    
struct Arena 
1990/1210    
{ 
1992/0612    
	Lock; 
	Bucket	*btab[MAX2SIZE];	 
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,451992/0618/sys/src/9/port/malloc.c:31,45
1992/0612    
	int pow; 
	Bucket *bp; 
1990/1210    
 
1992/0612    
	for(pow = 1; pow < MAX2SIZE; pow++) { 
1992/0618    
	size += sizeof(Bucket); 
 
	for(pow = 1; pow < MAXPOW; pow++) 
1992/0612    
		if(size <= (1<<pow)) 
			goto good; 
1990/1210    
	} 
 
1992/0612    
	return nil; 
1992/0618    
	return 0; 
 
1992/0612    
good: 
	/* Allocate off this list */ 
	lock(&arena); 
	bp = arena.btab[pow]; 
	if(bp) { 
1992/0612/sys/src/9/port/malloc.c:47,531992/0618/sys/src/9/port/malloc.c:47,53
1992/0612    
		arena.unlock(); 
1990/1210    
 
1992/0612    
		if(bp->magic != 0) 
			abort(); 
1992/0618    
			panic("malloc"); 
1990/1210    
 
1992/0612    
		bp->magic = MAGIC; 
1990/1210    
 
1992/0612/sys/src/9/port/malloc.c:55,681992/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); 
	bp = sbrk(size); 
1992/0618    
	bp = xbrk(size); 
1992/0612    
	if((int)bp < 0) 
		return nil; 
1990/1210    
 
1992/0612    
	bp->size = pow; 
	bp->magic = MAGIC; 
1990/1210    
                 
1992/0618    
	memset(bp->data, 0,  size); 
1992/0612    
	return bp->data; 
1990/1210    
} 
 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)