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

📄 mallint.h

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 H
字号:
/*	@(#)mallint.h	1.1	*//*	template for the header*/struct header {	struct header *nextblk;	struct header *nextfree;	struct header *prevfree;#ifdef  pdp11	struct header *dummy;	   /* pad to a multple of 4 bytes */#endif};/*	template for a small block*/struct lblk  {	union {		struct lblk *nextfree;  /* the next free little block in this					   holding block.  This field is used					   when the block is free */		struct holdblk *holder; /* the holding block containing this					   little block.  This field is used					   when the block is allocated */	}  header;	char byte;		    /* There is no telling how big this					   field freally is.  */};/* 	template for holding block*/struct holdblk {	struct holdblk *nexthblk;   /* next holding block */	struct holdblk *prevhblk;   /* previous holding block */	struct lblk *lfreeq;	/* head of free queue within block */	struct lblk *unused;	/* pointer to 1st little block never used */	int blksz;		/* size of little blocks contained */#ifdef pdp11	int pad;		/* pad to an even # of words */#endif	char space[1];		/* start of space to allocate.				   This must be on a word boundary */};/*	The following manipulate the free queue		DELFREEQ will remove x from the free queue		ADDFREEQ will add an element to the head			 of the free queue.		MOVEHEAD will move the free pointers so that			 x is at the front of the queue*/#define ADDFREEQ(x)       (x)->prevfree = &(freeptr[0]);\				(x)->nextfree = freeptr[0].nextfree;\				freeptr[0].nextfree->prevfree = (x);\				freeptr[0].nextfree = (x);\				assert((x)->nextfree != (x));\				assert((x)->prevfree != (x));#define DELFREEQ(x)       (x)->prevfree->nextfree = (x)->nextfree;\				(x)->nextfree->prevfree = (x)->prevfree;\				assert((x)->nextfree != (x));\				assert((x)->prevfree != (x));#define MOVEHEAD(x)       freeptr[1].prevfree->nextfree = \					freeptr[0].nextfree;\				freeptr[0].nextfree->prevfree = \					freeptr[1].prevfree;\				(x)->prevfree->nextfree = &(freeptr[1]);\				freeptr[1].prevfree = (x)->prevfree;\				(x)->prevfree = &(freeptr[0]);\				freeptr[0].nextfree = (x);\				assert((x)->nextfree != (x));\				assert((x)->prevfree != (x));/*	The following manipulate the busy flag*/#define BUSY	1#define SETBUSY(x)      ((struct header *)((int)(x) | BUSY))#define CLRBUSY(x)      ((struct header *)((int)(x) & ~BUSY))#define TESTBUSY(x)     ((int)(x) & BUSY)/*	The following manipulate the small block flag*/#define SMAL	2#define SETSMAL(x)      ((struct lblk *)((int)(x) | SMAL))#define CLRSMAL(x)      ((struct lblk *)((int)(x) & ~SMAL))#define TESTSMAL(x)     ((int)(x) & SMAL)/*	The following manipulate both flags.  They must be 	type coerced*/#define SETALL(x)       ((int)(x) | (SMAL | BUSY))#define CLRALL(x)       ((int)(x) & ~(SMAL | BUSY))/*	Other useful constants*/#define TRUE    1#define FALSE   0#define HEADSZ  sizeof(struct header)   /* size of unallocated block header *//*      MINHEAD is the minimum size of an allocated block header */#ifdef pdp11#define MINHEAD 4#else#define MINHEAD sizeof(struct header *)#endif#define MINBLKSZ 12		/* min. block size must as big as				   HEADSZ */#define BLOCKSZ 2048		/* memory is gotten from sbrk in				   multiples of BLOCKSZ */#define GROUND  (struct header *)0#define LGROUND (struct lblk *)0	/* ground for a queue within a holding					   block	*/#define HGROUND (struct holdblk *)0     /* ground for the holding block queue *//* number of bytes to align to  (must be at least 4, because lower 2 bits   are used for flags */#define ALIGNSZ 4#ifndef NULL#define NULL    (char *)0#endif/*	Structures and constants describing the holding blocks*/#define NUMLBLKS  100   /* default number of small blocks per holding block *//* size of a holding block with small blocks of size blksz */#define HOLDSZ(blksz)  (sizeof(struct holdblk) - sizeof(int) + blksz*numlblks)#ifndef pdp11#define FASTCT    6	  /* default number of block sizes that can be				   allocated quickly */#else#define FASTCT 0#endif#define MAXFAST   ALIGNSZ*FASTCT  /* default maximum size block for fast				     allocation */#ifdef debug#define CHECKQ  checkq();staticcheckq(){	register struct header *p;	p = &(freeptr[0]);	/* check forward */	while(p != &(freeptr[1]))       {		p = p->nextfree;		assert(p->prevfree->nextfree == p);	}	/* check backward */	while(p != &(freeptr[0]))       {		p = p->prevfree;		assert(p->nextfree->prevfree == p);	}}#else#define CHECKQ#endif

⌨️ 快捷键说明

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