alloc.c
来自「UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱」· C语言 代码 · 共 76 行
C
76 行
#/* * 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 + =
减小字号Ctrl + -
显示快捷键?