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,191992/0620/sys/src/9/port/alloc.c:13,19 (short | long | prev | next)
1992/0619    
	Maxpow		= 16, 
	Nhole		= 128, 
	Magichole	= 0xDeadBabe, 
	Magic2n		= 0xBadC0c0a, 
1992/0620    
	Magic2n		= 0xFeedBeef, 
1992/0618    
}; 
 
typedef struct Hole Hole; 
1992/0619/sys/src/9/port/alloc.c:56,621992/0620/sys/src/9/port/alloc.c:56,63
1992/0619    
struct Arena 
{ 
	Lock; 
	Bucket	*btab[Maxpow];	 
1992/0620    
	Bucket	*btab[Maxpow]; 
	int	nbuck[Maxpow]; 
1992/0619    
}; 
 
static Arena	arena; 
1992/0619/sys/src/9/port/alloc.c:226,2501992/0620/sys/src/9/port/alloc.c:227,232
1992/0619    
	unlock(&xlists); 
} 
 
void 
1992/0618    
xsummary(void) 
{ 
	int i; 
	Hole *h; 
                 
	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) { 
1992/0619    
		print("%.8lux %.8lux %d\n", h->addr, h->top, h->size); 
1992/0618    
		i += h->size; 
	} 
	print("%d bytes free\n", i); 
1992/0619    
} 
                 
void* 
malloc(ulong size) 
{ 
1992/0619/sys/src/9/port/alloc.c:251,2571992/0620/sys/src/9/port/alloc.c:233,239
1992/0619    
	int pow; 
	Bucket *bp; 
 
	for(pow = 1; pow < Maxpow; pow++) 
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,2771992/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,3121992/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    
} 


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