⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alloc.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
#/* * C library -- alloc/free */#define	logical	char *struct fb {	logical	size;	char	*next;};int	freelist[] {	0,	-1,};logical	slop	2;alloc(asize)logical asize;{	register logical size;	register logical np;	register logical cp;	if ((size = asize) == 0)		return(0);	size =+ 3;	size =& ~01;	for (;;) {		for (cp=freelist; (np= cp->next) != -1; cp=np) {			if (np->size>=size) {				if (size+slop >= np->size) {					cp->next = np->next;					return(&np->next);				}				cp = cp->next = np+size;				cp->size = np->size - size;				cp->next = np->next;				np->size = size;				return(&np->next);			}		}		asize = size<1024? 1024: size;		if ((cp = sbrk(asize)) == -1) {			return (-1);		}		cp->size = asize;		free(&cp->next);	}}free(aptr)char *aptr;{	register logical ptr;	register logical cp;	register logical np;	ptr = aptr-2;	cp = freelist;	while ((np = cp->next) < ptr)		cp = np;	if (ptr+ptr->size == np) {		ptr->size =+ np->size;		ptr->next = np->next;		np = ptr;	} else		ptr->next = np;	if (cp+cp->size == ptr) {		cp->size =+ ptr->size;		cp->next = ptr->next;	} else		cp->next = ptr;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -