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

📄 malloc.c

📁 mips架构的bootloader,99左右的版本 但源代码现在没人更新了
💻 C
字号:
/************************************************************* * File: lib/malloc.c * Purpose: Part of C runtime library * Author: Phil Bunce (pjb@carmel.com) * Revision History: *	970304	Start of revision history */typedef double ALIGN;union header {	struct {		union header *ptr;		unsigned size;		} s;	ALIGN x;	};typedef union header HEADER;static HEADER base;static HEADER *allocp; /* K&R called allocp, freep */#define NULL   0#define NALLOC 128/* The rest of this file is from pages 185-189 of K & R Edition 2 */void *malloc(nbytes)unsigned long nbytes;{	HEADER *morecore();	register HEADER *p, *q; /* K&R called q, prevp */	register unsigned nunits;	nunits = (nbytes + sizeof(HEADER)-1)/sizeof(HEADER)+1;	if ((q=allocp) == NULL) { /* no free list yet */		base.s.ptr = allocp = q = &base;		base.s.size = 0;	}	for (p=q->s.ptr; ; q=p, p = p->s.ptr) {		if (p->s.size >= nunits) { /* big enough */			if (p->s.size == nunits) /* exactly */				q->s.ptr = p->s.ptr;			else {		/* allocate tail end */				p->s.size -= nunits;				p += p->s.size;				p->s.size = nunits;			}			allocp = q;			return((char *) (p+1));		}		if (p==allocp)			if ((p = morecore(nunits)) == NULL)				return(NULL);	}}HEADER *morecore(nu)unsigned nu;{	char *sbrk();	register char *cp;	register HEADER *up;	register int rnu;		rnu = NALLOC * ((nu+NALLOC-1) / NALLOC);	cp = sbrk(rnu * sizeof(HEADER));	if ((int)cp == NULL)		return(NULL);	up = (HEADER *)cp;	up->s.size = rnu;	free((char *)(up+1));	return(allocp);}free(ap)char *ap;{	register HEADER *p, *q;	p = (HEADER *)ap - 1;	for (q=allocp; !(p > q && p < q->s.ptr); q=q->s.ptr)		if (q >= q->s.ptr && (p > q || p < q->s.ptr))			break;	if (p+p->s.size == q->s.ptr) {		p->s.size += q->s.ptr->s.size;		p->s.ptr = q->s.ptr->s.ptr;	} else		p->s.ptr = q->s.ptr;	if (q+q->s.size == p) {		q->s.size += p->s.size;		q->s.ptr = p->s.ptr;	} else		q->s.ptr = p;	allocp = q;}allocsize(ap)char *ap;{register HEADER *p;p = (HEADER *)ap - 1;return(p->s.size*sizeof(HEADER));}

⌨️ 快捷键说明

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