亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? allochblk.c

?? 內存垃圾收集程序
?? C
字號:
#define DEBUG#undef DEBUG#include <stdio.h>#include "runtime.h"/**//* allocate/free routines for heap blocks/* Note that everything called from outside the garbage collector/* should be prepared to abort at any point as the result of a signal./**//* * Free heap blocks are kept on a list sorted by address. * The hb_hdr.hbh_sz field of a free heap block contains the length * (in bytes) of the entire block. * Neighbors are coalesced. */struct hblk *savhbp = (struct hblk *)0;  /* heap block preceding next */					 /* block to be examined by   */					 /* allochblk.                *//* * Return 1 if there is a heap block sufficient for object size sz, * 0 otherwise.  Advance savhbp to point to the block prior to the * first such block. */int sufficient_hb(sz)int sz;{register struct hblk *hbp;struct hblk *prevhbp;int size_needed, size_avail;int first_time = 1;    size_needed = WORDS_TO_BYTES(sz>0? sz : -sz);    size_needed = (size_needed+sizeof(struct hblkhdr)+HBLKSIZE-1) & ~HBLKMASK;#   ifdef DEBUG	printf("sufficient_hb: sz = %d, size_needed = 0x%X\n", sz, size_needed);#   endif    /* search for a big enough block in free list */	hbp = savhbp;	for(;;) {	    prevhbp = hbp;	    hbp = ((prevhbp == (struct hblk *)0)		    ? hblkfreelist		    : prevhbp->hb_next);	    if( prevhbp == savhbp && !first_time) {		/* no sufficiently big blocks on free list */		return(0);	    }	    first_time = 0;	    if( hbp == (struct hblk *)0 ) continue;	    size_avail = hbp->hb_sz;	    if( size_avail >= size_needed ) {		savhbp = prevhbp;		return(1);	    }	}}/* * Allocate (and return pointer to) a heap block *   for objects of size |sz|. * * NOTE: Caller is responsible for adding it to global hblklist *       and for building an object freelist in it. * * The new block is guaranteed to be cleared if sz > 0. */struct hblk *allochblk(sz)long sz;{    register struct hblk *thishbp;    register struct hblk *hbp;    struct hblk *prevhbp;    long size_needed,            /* number of bytes in requested objects */         uninit,                 /* => Found uninitialized block         */         size_avail;    int first_time = 1;    char *sbrk();			/* data segment size increasing	*/    char *brk();			/* functions			*/    size_needed = WORDS_TO_BYTES(sz>0? sz : -sz);    size_needed = (size_needed+sizeof(struct hblkhdr)+HBLKSIZE-1) & ~HBLKMASK;#   ifdef DEBUG	printf("(allochblk) sz = %x, size_needed = 0x%X\n", sz, size_needed);#   endif    /* search for a big enough block in free list */	hbp = savhbp;	for(;;) {	    prevhbp = hbp;	    hbp = ((prevhbp == (struct hblk *)0)                    ? hblkfreelist		    : prevhbp->hb_next);	    if( prevhbp == savhbp && !first_time) {		/* no sufficiently big blocks on free list, */		/* let thishbp --> a newly-allocated block, */		/* free it (to merge into existing block    */		/* list) and start the search again, this   */		/* time with guaranteed success.            */                  int size_to_get = size_needed + hincr * HBLKSIZE;		  extern int holdsigs();		  int Omask;		  /* Don't want to deal with signals in the middle of this */		      Omask = holdsigs();                    update_hincr;		    thishbp = HBLKPTR(((unsigned)sbrk(0))+HBLKSIZE-1 );		    heaplim = (char *) (((unsigned)thishbp) + size_to_get);		    if( (brk(heaplim)) == ((char *)-1) ) {                        write(2,"Out of Memory!  Giving up ...\n", 30);			exit(-1);		    }#                   ifdef PRINTSTATS			printf("Need to increase heap size by %d\n",			       size_to_get);			fflush(stdout);#                   endif		    heapsize += size_to_get;		    thishbp->hb_sz = 			BYTES_TO_WORDS(size_to_get - sizeof(struct hblkhdr));		    freehblk(thishbp);		    /* Reenable signals */		      sigsetmask(Omask);		    hbp = savhbp;		    first_time = 1;		continue;	    }	    first_time = 0;	    if( hbp == (struct hblk *)0 ) continue;	    size_avail = hbp->hb_sz;	    if( size_avail >= size_needed ) {		/* found a big enough block       */		/* let thishbp --> the block      */		/* set prevhbp, hbp to bracket it */		    thishbp = hbp;		    if( size_avail == size_needed ) {			hbp = hbp->hb_next;			uninit = thishbp -> hb_uninit;		    } else {			uninit = thishbp -> hb_uninit;			thishbp -> hb_uninit = 1; 				/* Just in case we get interrupted by a */				/* signal                               */			hbp = (struct hblk *)			    (((unsigned)thishbp) + size_needed);			hbp->hb_uninit = uninit;			hbp->hb_next = thishbp->hb_next;			hbp->hb_sz = size_avail - size_needed;		    }		/* remove *thishbp from hblk freelist */		    if( prevhbp == (struct hblk *)0 ) {			hblkfreelist = hbp;		    } else {			prevhbp->hb_next = hbp;		    }		/* save current list search position */		    savhbp = prevhbp;		break;	    }	}    /* set size and mask field of *thishbp correctly */	thishbp->hb_sz = sz;	thishbp->hb_mask = -1;  /* may be changed by new_hblk */    /* Clear block if necessary */	if (uninit && sz > 0) {	    register word * p = &(thishbp -> hb_body[0]);	    register word * plim;	    plim = (word *)(((char *)thishbp) + size_needed);	    while (p < plim) {		*p++ = 0;	    }	}    /* Clear mark bits */	{	    register word *p = (word *)(&(thishbp -> hb_marks[0]));	    register word * plim = (word *)(&(thishbp -> hb_marks[MARK_BITS_SZ]));	    while (p < plim) {		*p++ = 0;	    }	}#   ifdef DEBUG	printf("Returning 0x%X\n", thishbp);	fflush(stdout);#   endif    return( thishbp );} /* Clear the header information in a previously allocated heap block p *//* so that it can be coalesced with an initialized heap block.         */static clear_header(p)register struct hblk *p;{    p -> hb_sz = 0;#   ifndef HBLK_MAP      p -> hb_index = (struct hblk **)0;#   endif    p -> hb_next = 0;    p -> hb_mask = 0;#   if MARK_BITS_SZ <= 60	/* Since this block was deallocated, only spurious mark      */	/* bits corresponding to the header could conceivably be set */	p -> hb_marks[0] = 0;	p -> hb_marks[1] = 0;#   else	--> fix it#   endif}/* * Free a heap block. * * Assume the block is not currently on hblklist. * * Coalesce the block with its neighbors if possible. * All mark words (except possibly the first) are assumed to be cleared. * The body is assumed to be cleared unless hb_uninit is nonzero. */voidfreehblk(p)register struct hblk *p;{register struct hblk *hbp, *prevhbp;register int size;    /* savhbp may become invalid due to coalescing.  Clear it. */	savhbp = (struct hblk *)0;    size = p->hb_sz;    if( size < 0 ) size = -size;    size = 	((WORDS_TO_BYTES(size)+sizeof(struct hblkhdr)+HBLKSIZE-1)		 & (~HBLKMASK));    p->hb_sz = size;    prevhbp = (struct hblk *) 0;    hbp = hblkfreelist;    while( (hbp != (struct hblk *)0) && (hbp < p) ) {	prevhbp = hbp;	hbp = hbp->hb_next;    }    /* Coalesce with successor, if possible */      if( (((unsigned)p)+size) == ((unsigned)hbp) ) {	(p -> hb_uninit) |= (hbp -> hb_uninit);	p->hb_next = hbp->hb_next;	p->hb_sz += hbp->hb_sz;	if (!p -> hb_uninit) clear_header(hbp);      } else {	p->hb_next = hbp;      }    if( prevhbp == (struct hblk *)0 ) {	hblkfreelist = p;    } else if( (((unsigned)prevhbp) + prevhbp->hb_hdr.hbh_sz) ==	    ((unsigned)p) ) {      /* Coalesce with predecessor */	(prevhbp->hb_uninit) |= (p -> hb_uninit);	prevhbp->hb_next = p->hb_next;	prevhbp->hb_sz += p->hb_sz;	if (!prevhbp -> hb_uninit) clear_header(p);    } else {	prevhbp->hb_next = p;    }}/* Add a heap block to hblklist or hblkmap.  */void add_hblklist(hbp)struct hblk * hbp;{# ifdef HBLK_MAP    long size = hbp->hb_sz;    long index = divHBLKSZ(((long)hbp) - ((long)heapstart));    long i;    if( size < 0 ) size = -size;    size = (divHBLKSZ(WORDS_TO_BYTES(size)+sizeof(struct hblkhdr)+HBLKSIZE-1));	   /* in units of HBLKSIZE */    hblkmap[index] = HBLK_VALID;    for (i = 1; i < size; i++) {	if (i < 0x7f) {	    hblkmap[index+i] = i;	} else {	    /* May overflow a char.  Store largest possible value */	    hblkmap[index+i] = 0x7e;	}    }# else    if (last_hblk >= &hblklist[MAXHBLKS]) {	fprintf(stderr, "Not configured for enough memory\n");	exit(1);    }    *last_hblk = hbp;    hbp -> hb_index = last_hblk;    last_hblk++;# endif}/* Delete a heap block from hblklist or hblkmap.  */void del_hblklist(hbp)struct hblk * hbp;{# ifdef HBLK_MAP    long size = hbp->hb_sz;    long index = divHBLKSZ(((long)hbp) - ((long)heapstart));    long i;    if( size < 0 ) size = -size;    size = (divHBLKSZ(WORDS_TO_BYTES(size)+sizeof(struct hblkhdr)+HBLKSIZE-1));	   /* in units of HBLKSIZE */    for (i = 0; i < size; i++) {	hblkmap[index+i] = HBLK_INVALID;    }# else    register struct hblk ** list_entry;    last_hblk--;    /* Let **last_hblk use the slot previously occupied by *hbp */	list_entry = hbp -> hb_index;	(*last_hblk) -> hb_index = list_entry;	*list_entry = *last_hblk;# endif}/* Initialize hblklist */void init_hblklist(){#   ifdef DEBUG	printf("Here we are in init_hblklist - ");	printf("last_hblk = %x\n",&(hblklist[0]));#   endif#   ifndef HBLK_MAP      last_hblk = &(hblklist[0]);#   endif}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品久久久久久久久久久久久久久久久| 依依成人综合视频| 亚洲老司机在线| 精品在线亚洲视频| 色婷婷av一区二区三区大白胸| 欧美日韩亚洲国产综合| 久久精品在线观看| 亚洲成av人片在线| 99久久婷婷国产综合精品| 9191精品国产综合久久久久久| 国产精品久久夜| 久久99久久精品| 欧美日韩成人综合| 亚洲摸摸操操av| 成人综合婷婷国产精品久久蜜臀| 欧美高清dvd| 亚洲自拍偷拍图区| 91麻豆蜜桃一区二区三区| 国产亚洲一二三区| 麻豆精品视频在线观看免费| 欧美在线影院一区二区| 国产精品久久久久久久久免费桃花 | 欧美日韩一二三| 中文字幕一区二区日韩精品绯色| 久久99精品国产| 在线成人午夜影院| 亚洲va天堂va国产va久| 91免费观看国产| 亚洲欧洲在线观看av| 国产一区欧美一区| 日韩精品影音先锋| 男女男精品网站| 欧美一区二区视频在线观看2022| 亚洲午夜在线观看视频在线| 欧美系列亚洲系列| 亚洲国产精品影院| 欧美日韩中文国产| 亚洲成人激情av| 884aa四虎影成人精品一区| 亚洲第一电影网| 91精品视频网| 久久精品99国产精品| 久久中文娱乐网| 成人精品视频一区二区三区| 中文字幕在线不卡一区| 91精品1区2区| 午夜精品福利视频网站| 欧美一区二区三区免费视频| 久久99精品视频| 国产欧美日韩精品一区| 97久久久精品综合88久久| 一区二区三区四区亚洲| 欧美喷潮久久久xxxxx| 首页国产欧美日韩丝袜| 欧美成人vps| 99久久精品免费看| 香蕉成人啪国产精品视频综合网 | 日韩区在线观看| 国模无码大尺度一区二区三区| 久久久久久99久久久精品网站| 东方aⅴ免费观看久久av| 一区二区三区资源| 日韩欧美一级二级| 不卡av免费在线观看| 一区二区三区国产豹纹内裤在线| 91麻豆精品国产91久久久久久久久| 裸体一区二区三区| 国产精品久久久久久久久久免费看 | 欧美国产一区视频在线观看| 一本一道综合狠狠老| 日韩av电影免费观看高清完整版 | 欧美曰成人黄网| 日韩国产欧美三级| 国产精品美女久久久久久久| 在线观看日韩电影| 国产麻豆视频精品| 午夜激情一区二区| 中文一区二区完整视频在线观看| 欧美色网站导航| 懂色av一区二区三区免费看| 日韩电影在线一区| 亚洲三级在线免费| 亚洲精品一区二区三区99| 99久久免费精品| 国产一区二区女| 日韩国产一区二| 中文字幕在线不卡一区| 久久综合久久综合亚洲| 欧美视频一区在线| av不卡免费在线观看| 精品一区二区三区在线观看| 夜夜亚洲天天久久| 国产精品成人免费精品自在线观看 | 国产精品不卡在线| 精品免费99久久| 欧美老女人第四色| 色婷婷精品久久二区二区蜜臂av| 国产精品自拍三区| 另类综合日韩欧美亚洲| 天天综合天天综合色| 樱花草国产18久久久久| 国产精品天美传媒| 国产欧美日韩综合| 久久久天堂av| 久久综合色婷婷| 欧美成人精品二区三区99精品| 制服.丝袜.亚洲.另类.中文| 在线精品视频一区二区三四| 97超碰欧美中文字幕| a美女胸又www黄视频久久| 成人久久视频在线观看| 国产不卡视频在线观看| 国产精品一区二区三区乱码| 国内精品伊人久久久久影院对白| 日韩不卡一区二区三区| 日韩在线一区二区| 丝袜美腿亚洲一区| 日本网站在线观看一区二区三区| 日日夜夜免费精品| 三级久久三级久久| 日韩高清国产一区在线| 视频一区二区三区在线| 青青草成人在线观看| 七七婷婷婷婷精品国产| 美女国产一区二区三区| 精品写真视频在线观看| 国产精品99久| 不卡av电影在线播放| 在线免费不卡视频| 欧美二区乱c少妇| 精品国产亚洲一区二区三区在线观看 | 91精品国产色综合久久| 在线观看视频一区二区欧美日韩| 日本道色综合久久| 欧美久久久久久久久久| 欧美一区二区三区婷婷月色 | 精品亚洲国内自在自线福利| 极品美女销魂一区二区三区 | 成人免费高清在线| 色欧美片视频在线观看在线视频| 欧美性受极品xxxx喷水| 欧美一区二区三区免费视频 | 日韩欧美电影在线| 国产精品色呦呦| 亚洲综合av网| 久久国产精品一区二区| voyeur盗摄精品| 欧美日本在线播放| 久久久不卡影院| 一区二区三区四区中文字幕| 卡一卡二国产精品| 91网站视频在线观看| 欧美一区二区三区四区久久| 久久久久久日产精品| 一区二区视频在线| 久久国内精品自在自线400部| 成人免费三级在线| 欧美日韩国产免费一区二区| 久久影院午夜论| 亚洲一区二区黄色| 国产精品18久久久久久久久 | 一区二区三区四区高清精品免费观看| 视频一区二区国产| www.成人网.com| 欧美zozo另类异族| 亚洲香肠在线观看| 成人午夜视频在线| 日韩欧美中文一区| 一区二区在线观看免费| 97精品超碰一区二区三区| 日韩三级av在线播放| 一区二区在线免费| 成人性生交大片免费看视频在线| 欧美日韩午夜精品| 亚洲天堂成人网| 粉嫩av亚洲一区二区图片| 欧美一级欧美三级在线观看| 亚洲欧美日韩国产一区二区三区 | 国产精品美女久久久久久久久| 亚洲成a人片在线不卡一二三区| 成人做爰69片免费看网站| 精品久久人人做人人爽| 午夜a成v人精品| 在线一区二区观看| 日韩一区在线看| 成人性生交大片免费看在线播放 | 亚洲成av人片www| 91色婷婷久久久久合中文| 国产午夜亚洲精品理论片色戒| 蜜桃91丨九色丨蝌蚪91桃色| 欧美熟乱第一页| 亚洲综合图片区| 91激情五月电影| 亚洲精品一二三| 色综合天天做天天爱| 国产欧美日韩在线| 国产不卡在线视频| 国产精品素人一区二区| 成人爱爱电影网址| 国产精品网站在线观看|