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

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

?? balloc.c

?? 開發板bios源碼 開發板bios源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
		return mp;
	}
	if ((newbuf = balloc(B_ARGS, newsize)) != NULL) {
		memcpy(newbuf, mp, bp->u.size);
		bfree(B_ARGS, mp);
	}
	return newbuf;
}

/******************************************************************************/
/*
 *	Find the size of the block to be balloc'ed.  It takes in a size, finds the 
 *	smallest binary block it fits into, adds an overhead amount and returns.
 *	q is the binary size used to keep track of block sizes in use.  Called
 *	from both balloc and bfree.
 */

static int ballocGetSize(int size, int *q)
{
	int	mask;

	mask = (size == 0) ? 0 : (size-1) >> B_SHIFT;
	for (*q = 0; mask; mask >>= 1) {
		*q = *q + 1;
	}
	return ((1 << (B_SHIFT + *q)) + sizeof(bType));
}

/******************************************************************************/
#if (defined (B_FILL) || defined (B_VERIFY_CAUSES_SEVERE_OVERHEAD))
/*
 *	Fill the block (useful during development to catch zero fill assumptions)
 */

static void bFillBlock(void *buf, int bufsize)
{
	memset(buf, B_FILL_CHAR, bufsize);
}
#endif

/******************************************************************************/
#ifdef B_STATS
/*
 *	Statistics. Do output via calling the writefn callback function with 
 *	"handle" as the output file handle. 
 */

void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...))
{
	bStatsFileType	*fp, *files;
	bStatsBlkType	*blkp;
	bType			*bp;
	char_t			*cp;
	int				q, count, mem, total, len;
	static	int 	recurseProtect = 0;

	if (recurseProtect++ > 0) {
		recurseProtect--;
		return;
	}

	if (writefn == NULL) {
		writefn = bstatsWrite;
	}

/*
 *	Print stats for each memory block
 */
	(*writefn)(handle, T("\nMemory Stats\n"));

/*
 *	The following tabular format is now used for the output.
 *   Q  Size  Free Bytes Inuse Bytes Allocs
 *	dd ddddd   ddd ddddd  dddd ddddd   dddd
 */
	(*writefn)(handle, " Q  Size   Free  Bytes Inuse Bytes Allocs\n");

	total = 0;
	for (q = 0; q < B_MAX_CLASS; q++) {
		count = 0;
		for (bp = bQhead[q]; bp; bp = bp->u.next) {
			count++;
		}
		mem = count * (1 << (q + B_SHIFT));
		total += mem;
		(*writefn)(handle, 
			T("%2d %5d   %4d %6d  %4d %5d   %4d\n"),
			q, 1 << (q + B_SHIFT), count, mem, bStats[q].inuse, 
			bStats[q].inuse * (1 << (q + B_SHIFT)), bStats[q].alloc);
	}

	(*writefn)(handle, T("\n"));

/*
 *	Print summary stats
 *
 *	bFreeSize			Initial memory reserved with bopen call
 *	bStatsMemMalloc		memory from calls to system MALLOC
 *	bStatsMemMax		
 *	bStatsBallocMax		largest amount of memory from balloc calls
 *	bStatsMemInUse
 *	bStatsBallocInUse	present balloced memory being used
 *	bStatsBlksMax);
 *	bStackStart
 *	bStackMin);
 *	total);
 *	bFreeLeft);
 *
 */
	(*writefn)(handle, T("Initial free list size    %7d\n"), bFreeSize);
	(*writefn)(handle, T("Max memory malloced       %7d\n"), bStatsMemMalloc);
	(*writefn)(handle, T("Max memory ever used      %7d\n"), bStatsMemMax);
	(*writefn)(handle, T("Max memory ever balloced  %7d\n"), bStatsBallocMax);
	(*writefn)(handle, T("Memory currently in use   %7d\n"), bStatsMemInUse);
	(*writefn)(handle, T("Memory currently balloced %7d\n"), bStatsBallocInUse);
	(*writefn)(handle, T("Max blocks allocated      %7d\n"), bStatsBlksMax);
	(*writefn)(handle, T("Maximum stack used        %7d\n"), 
		(int) bStackStart - (int) bStackMin);

	(*writefn)(handle, T("Free memory on all queues %7d\n"), total);
	(*writefn)(handle, T("Free list buffer left     %7d\n"), bFreeLeft);
	(*writefn)(handle, T("Total free memory         %7d\n"), bFreeLeft + total);

/*
 *	Print per file allocation stats. Sort the copied table.
 */
	len = sizeof(bStatsFileType) * B_MAX_FILES;
	files = malloc(len);
	if (files == NULL) {
		(*writefn)(handle, T("Can't allocate stats memory\n"));
		recurseProtect--;
		return;
	}
	memcpy(files, bStatsFiles, len);
	qsort(files, bStatsFilesMax, sizeof(bStatsFileType), bStatsFileSort);
	
	(*writefn)(handle, T("\nMemory Currently Allocated\n"));
	total = 0;
	(*writefn)(handle, 
		T("                      bytes, blocks in use, total times,")
		T("largest,   q\n"));

	for (fp = files; fp < &files[bStatsFilesMax]; fp++) {
		if (fp->file[0]) {
			(*writefn)(handle, T("%18s, %7d,         %5d,      %6d, %7d,%4d\n"),
				fp->file, fp->allocated, fp->count, fp->times, fp->largest, 
				fp->q);
			total += fp->allocated;
		}
	}
	(*writefn)(handle, T("\nTotal allocated %7d\n\n"), total);

/*
 *	Dump the actual strings
 */
	(*writefn)(handle, T("\nStrings\n"));
	for (blkp = &bStatsBlks[bStatsBlksMax - 1]; blkp >= bStatsBlks; blkp--) {
		if (blkp->ptr) {
			cp = (char_t*) ((char*) blkp->ptr + sizeof(bType));
			fp = blkp->who;
			if (gisalnum(*cp)) {
				(*writefn)(handle, T("%-50s allocated by %s\n"), cp, 
					fp->file);
			}
		}
	}
	free(files);
	recurseProtect--;
}

/******************************************************************************/
/*
 *	File sort function. Used to sort per file stats
 */

static int bStatsFileSort(const void *cp1, const void *cp2)
{
	bStatsFileType	*s1, *s2;

	s1 = (bStatsFileType*) cp1;
	s2 = (bStatsFileType*) cp2;

	if (s1->allocated < s2->allocated)
		return -1;
	else if (s1->allocated == s2->allocated)
		return 0;
	return 1;
}

/******************************************************************************/
/*
 *	Accumulate allocation statistics
 */

static void bStatsAlloc(B_ARGS_DEC, void *ptr, int q, int size)
{
	int				memSize;
	bStatsFileType	*fp;
	bStatsBlkType	*bp;
	char_t			name[FNAMESIZE + 10];

	gsprintf(name, T("%s:%d"), B_ARGS);

	bStats[q].alloc++;
	bStats[q].inuse++;
	bStatsMemInUse += size;
	if (bStatsMemInUse > bStatsMemMax) {
		bStatsMemMax = bStatsMemInUse;
	}
	memSize = (1 << (B_SHIFT + q)) + sizeof(bType);
	bStatsBallocInUse += memSize;
	if (bStatsBallocInUse > bStatsBallocMax) {
		bStatsBallocMax = bStatsBallocInUse;
	}

/*
 *	Track maximum stack usage. Assumes a stack growth down. Approximate as
 *	we only measure this on block allocation.
 */
	if ((void*) &file < bStackMin) {
		bStackMin = (void*) &file;
	}

/*
 *	Find the file and adjust the stats for this file
 */
	for (fp = bStatsFiles; fp < &bStatsFiles[bStatsFilesMax]; fp++) {
		if (fp->file[0] == file[0] && gstrcmp(fp->file, name) == 0) {
			fp->allocated += size;
			fp->count++;
			fp->times++;
			if (fp->largest < size) {
				fp->largest = size;
				fp->q = q;
			}
			break;
		}
	}

/*
 *	New entry: find the first free slot and create a new entry
 */
	if (fp >= &bStatsFiles[bStatsFilesMax]) {
		for (fp = bStatsFiles; fp < &bStatsFiles[B_MAX_FILES]; fp++) {
			if (fp->file[0] == '\0') {
				gstrncpy(fp->file, name, TSZ(fp->file));
				fp->allocated += size;
				fp->count++;
				fp->times++;
				fp->largest = size;
				fp->q = q;
				if ((fp - bStatsFiles) >= bStatsFilesMax) {
					bStatsFilesMax = (fp - bStatsFiles) + 1;
				}
				break;
			}
		}
	}

/*
 *	Update the per block stats. Allocate a new slot.
 */
	for (bp = bStatsBlks; bp < &bStatsBlks[B_MAX_BLOCKS]; bp++) {
		if (bp->ptr == NULL) {
			bp->ptr = ptr;
			bp->who = fp;
			if ((bp - bStatsBlks) >= bStatsBlksMax) {
				bStatsBlksMax = (bp - bStatsBlks) + 1;
			}
			break;
		}
	}
}

/******************************************************************************/
/*
 *	Free statistics
 */

static void bStatsFree(B_ARGS_DEC, void *ptr, int q, int size)
{
	int				memSize;
	bStatsFileType	*fp;
	bStatsBlkType	*bp;

	memSize = (1 << (B_SHIFT + q)) + sizeof(bType);
	bStatsMemInUse -= size;
	bStatsBallocInUse -= memSize;
	bStats[q].inuse--;

/*
 *	Update the per block stats. Try from the end first 
 */
	for (bp = &bStatsBlks[bStatsBlksMax - 1]; bp >= bStatsBlks; bp--) {
		if (bp->ptr == ptr) {
			bp->ptr = NULL;
			fp = bp->who;
			bp->who = NULL;
			fp->allocated -= size;
			fp->count--;
			return;
		}
	}
}

/******************************************************************************/
/*
 *	Default output function. Just send to trace channel.
 */

#undef sprintf
static void bstatsWrite(int handle, char_t *fmt, ...)
{
	va_list		args;
	char_t		buf[BUF_MAX];

	va_start(args, fmt);
	vsprintf(buf, fmt, args);
	va_end(args);
	traceRaw(buf);
}


#else /* not B_STATS */
/******************************************************************************/
/*
 *	Dummy bstats for external calls that aren't protected by #if B_STATS.
 */

void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...))
{
}
#endif /* B_STATS */

/******************************************************************************/
#ifdef B_VERIFY_CAUSES_SEVERE_OVERHEAD
/*
 *	The following routines verify the integrity of the balloc memory space.
 *	These functions use the B_FILL feature.  Corruption is defined
 *	as bad integrity flags in allocated blocks or data other than B_FILL_CHAR
 *	being found anywhere in the space which is unallocated and that is not a
 *	next pointer in the free queues. a_assert is called if any corruption is
 *	found.  CAUTION:  These functions add severe processing overhead and should
 *	only be used when searching for a tough corruption problem.
 */

/******************************************************************************/
/*
 *	verifyUsedBlock verifies that a block which was previously allocated is
 *	still uncorrupted.  
 */

static void verifyUsedBlock(bType *bp, int q)
{
	int		memSize, size;
	char	*p;

	memSize = (1 << (B_SHIFT + q)) + sizeof(bType);
	a_assert((bp->flags & ~B_MALLOCED) == B_INTEGRITY);
	size = bp->u.size;
	for (p = ((char *)bp)+sizeof(bType)+size; p < ((char*)bp)+memSize; p++) {
		a_assert(*p == B_FILL_CHAR);
	}
}

/******************************************************************************/
/*
 *	verifyFreeBlock verifies that a previously free'd block in one of the queues
 *	is still uncorrupted.
 */

static void verifyFreeBlock(bType *bp, int q)
{
	int		memSize;
	char	*p;

	memSize = (1 << (B_SHIFT + q)) + sizeof(bType);
	for (p = ((char *)bp)+sizeof(void*); p < ((char*)bp)+memSize; p++) {
		a_assert(*p == B_FILL_CHAR);
	}
	bp = (bType *)p;
	a_assert((bp->flags & ~B_MALLOCED) == B_INTEGRITY ||
		bp->flags == B_FILL_WORD);
}

/******************************************************************************/
/*
 *	verifyBallocSpace reads through the entire balloc memory space and
 *	verifies that all allocated blocks are uncorrupted and that, with the
 *	exception of free list next pointers, all other unallocated space is
 *	filled with B_FILL_CHAR.
 */

void verifyBallocSpace()
{
	int		q;
	char	*p;
	bType	*bp;

/*
 *	First verify all the free blocks.
 */
	for (q = 0; q < B_MAX_CLASS; q++) {	
		for (bp = bQhead[q]; bp != NULL; bp = bp->u.next) {
			verifyFreeBlock(bp, q);
		}
	}

/*
 *	Now verify other space
 */
	p = bFreeBuf;
	while (p < (bFreeBuf + bFreeSize)) {
		bp = (bType *)p;
		if (bp->u.size > 0xFFFFF) {
			p += sizeof(bp->u);
			while (p < (bFreeBuf + bFreeSize) && *p == B_FILL_CHAR) {
				p++;
			}
		} else {
			a_assert(((bp->flags & ~B_MALLOCED) == B_INTEGRITY) ||
				bp->flags == B_FILL_WORD);
			p += (sizeof(bType) + bp->u.size);
			while (p < (bFreeBuf + bFreeSize) && *p == B_FILL_CHAR) {
				p++;
			}
		}
	}
}
#endif /* B_VERIFY_CAUSES_SEVERE_OVERHEAD */

/******************************************************************************/

#else /* NO_BALLOC */
int bopen(void *buf, int bufsize, int flags)
{
	return 0;
}

/******************************************************************************/

void bclose()
{
}

/******************************************************************************/

void bstats(int handle, void (*writefn)(int handle, char_t *fmt, ...))
{
}

/******************************************************************************/

char_t *bstrdupNoBalloc(char_t *s)
{
#ifdef UNICODE
	if (s) {
		return wcsdup(s);
	} else {
		return wcsdup(T(""));
	}
#else
	return bstrdupANoBalloc(s);
#endif
}

/******************************************************************************/

char *bstrdupANoBalloc(char *s)
{
	char*	buf;

	if (s == NULL) {
		s = "";
	}
	buf = malloc(strlen(s)+1);
	strcpy(buf, s);
	return buf;
}

#endif /* NO_BALLOC */
/******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91色porny在线视频| 欧美一区二区播放| 9191精品国产综合久久久久久| 欧美成人精品1314www| 国产精品久久久久毛片软件| 亚洲成va人在线观看| 成人手机在线视频| 欧美大尺度电影在线| 亚洲精品国产第一综合99久久 | 日韩一区二区不卡| 最新国产精品久久精品| 久久成人久久鬼色| 欧美日韩综合色| 亚洲欧洲三级电影| 国模一区二区三区白浆| 欧美另类高清zo欧美| 亚洲女同一区二区| 国产成人免费视频精品含羞草妖精| 欧美一区二区在线免费观看| 一区二区免费在线| 成人免费观看视频| 久久综合色鬼综合色| 日本成人超碰在线观看| 欧美图区在线视频| 最新国产精品久久精品| 不卡的av网站| 久久丝袜美腿综合| 美女网站视频久久| 欧美高清视频一二三区| 视频在线观看一区| 欧美日本一道本| 亚洲一区在线观看网站| 在线观看亚洲a| 亚洲精品国久久99热| 91蜜桃网址入口| 亚洲精品久久嫩草网站秘色| 91视视频在线观看入口直接观看www | 国产丶欧美丶日本不卡视频| 精品久久人人做人人爰| 男男视频亚洲欧美| 欧美电影免费观看高清完整版在线| 亚洲大片一区二区三区| 欧美男生操女生| 青青草国产成人99久久| 日韩一区二区三区在线| 老司机免费视频一区二区| 精品久久久久一区二区国产| 国产在线观看免费一区| 久久精品视频在线免费观看| 国产成人福利片| 亚洲日本va午夜在线影院| 在线精品国精品国产尤物884a | 久久精品一区二区三区不卡 | 视频一区二区三区中文字幕| 欧美日韩国产a| 婷婷开心激情综合| 欧美mv和日韩mv的网站| 国产一区二区成人久久免费影院| 国产偷国产偷精品高清尤物| 99国产精品国产精品久久| 亚洲黄色免费网站| 欧美精品在线一区二区| 国产乱一区二区| 欧美日韩国产首页在线观看| 免费看日韩a级影片| 国产欧美日韩激情| 欧美主播一区二区三区美女| 日本不卡的三区四区五区| 中文字幕精品一区二区三区精品| 91免费视频网址| 日本最新不卡在线| 国产精品久久久久久久久动漫| 99精品久久久久久| 日本va欧美va瓶| 中文乱码免费一区二区| 91麻豆精品91久久久久同性| 国产91精品精华液一区二区三区| 一区二区三区免费网站| 久久综合九色综合欧美就去吻 | 自拍偷拍欧美精品| 欧美伦理电影网| av福利精品导航| 日本不卡123| 亚洲品质自拍视频| 久久伊99综合婷婷久久伊| 欧美性色黄大片| 国产精品99久久久久| 五月激情综合网| 国产欧美精品日韩区二区麻豆天美| 欧美午夜电影一区| 国产成人精品免费看| 午夜精品久久久久久久久久| 综合久久综合久久| 26uuu久久综合| 欧美精品v国产精品v日韩精品| 成人午夜视频免费看| 日韩电影在线一区二区| 亚洲人成在线观看一区二区| 国产亚洲污的网站| 精品久久免费看| 91精品免费在线| 欧美日本一区二区| 色婷婷久久一区二区三区麻豆| 国产91富婆露脸刺激对白| 麻豆91精品91久久久的内涵| 亚洲sss视频在线视频| 亚洲午夜久久久久久久久久久| 自拍视频在线观看一区二区| 国产精品理论在线观看| 中文字幕成人网| 亚洲国产激情av| 国产蜜臀av在线一区二区三区| 欧美精品一区二区三区在线| 欧美成人国产一区二区| 精品久久免费看| 久久这里只有精品6| 久久久一区二区三区捆绑**| 精品国产百合女同互慰| 久久人人爽爽爽人久久久| xf在线a精品一区二区视频网站| 精品国产污网站| www久久精品| 国产日产欧美一区二区三区| 久久免费偷拍视频| 国产亚洲一区二区三区在线观看| 久久伊人蜜桃av一区二区| 久久综合九色综合97婷婷| 久久综合色综合88| 国产午夜精品理论片a级大结局| 久久久国产一区二区三区四区小说 | 久久一二三国产| 久久久久久久久久久电影| 国产三级精品视频| 中文字幕永久在线不卡| 亚洲黄色性网站| 三级久久三级久久久| 日韩1区2区3区| 韩国av一区二区三区在线观看| 国产精品1区2区3区在线观看| 成人一区二区三区| 色综合中文字幕国产 | 欧美性受xxxx| 欧美一区二区三区免费| 欧美不卡一二三| 国产精品麻豆一区二区| 亚洲午夜精品一区二区三区他趣| 天堂蜜桃91精品| 风间由美性色一区二区三区| 91视频在线看| 日韩三级在线观看| 国产精品久久久久久久久晋中| 亚洲黄色片在线观看| 久久成人免费日本黄色| 不卡的av网站| 91精品国产综合久久小美女| 国产网站一区二区三区| 亚洲午夜一区二区三区| 寂寞少妇一区二区三区| 91麻豆精东视频| 日韩欧美国产综合| 亚洲欧美一区二区三区久本道91 | 最新久久zyz资源站| 免费在线成人网| 91亚洲资源网| 欧美va日韩va| 亚洲午夜在线视频| 大胆欧美人体老妇| 欧美电影在线免费观看| 欧美国产乱子伦| 麻豆国产一区二区| 色女孩综合影院| 国产清纯白嫩初高生在线观看91 | 综合欧美亚洲日本| 国内精品伊人久久久久av影院| 色综合咪咪久久| 久久精品视频在线免费观看| 日韩中文字幕一区二区三区| 99久久精品国产麻豆演员表| 精品播放一区二区| 日韩国产精品久久久| 91片在线免费观看| 国产日韩在线不卡| 久久99深爱久久99精品| 69堂国产成人免费视频| 亚洲毛片av在线| 高清成人免费视频| 久久综合色之久久综合| 蜜臀91精品一区二区三区| 欧美日韩国产综合视频在线观看| 中文字幕+乱码+中文字幕一区| 久久99精品国产.久久久久| 欧美视频一区二区三区在线观看| 国产精品美女久久久久久久久 | 久久综合九色综合欧美亚洲| 日韩电影在线观看一区| 在线视频综合导航| 亚洲视频在线观看三级| 成人高清免费观看| 国产精品护士白丝一区av| 国产精品1区2区3区在线观看|