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

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

?? lmalloc.c

?? c程序源碼鏈接過程方面的代碼
?? C
字號:
#include <stdlib.h>
#include <string.h>
#include "xlmalloc.h"



static unsigned long Memfail=0L;	/* Count of allocation failures */
static unsigned long Allocs=0L;		/* Total allocations */
static unsigned long Frees=0L;		/* Total frees */
static unsigned long Invalid=0L;	/* Total calls to SysLfree with garbage arg */

/* The array is to record the number that 
 * the special sized memory block is used.
 * Sizes[0]  -----   memory block size: 2/0
 *           .....
 * Sizes[n]  -----   memory block size: 2/n 
* max block size is 2/19 = 128K */
static unsigned long Sizes[20]={ 0L, 0L, 0L, 0L, 0L,
				 0L, 0L, 0L, 0L, 0L,
				 0L, 0L, 0L, 0L, 0L,
				 0L, 0L, 0L, 0L, 0L };;

/* This debugging pattern MUST be exactly equal in size 
 * to the "header" union defined later */
static char Debugpat[] = { 0xfe,0xed, 0xfa, 0xce, 0xde, 0xad, 0xbe, 0xef };

static HEADER *Base=NULL;			//堆的基地址指針
static HEADER *First=NULL;			//第一個有效的分配塊
static HEADER *Allocp = NULL;		//FreeList的首指針


struct sheader heap[Heapsize/sizeof(struct sheader)];
//char	array_memory[Heapsize];

/* Heap memory, ABLKSIZE units */
static unsigned long Availmem = BTOU(Heapsize)-2;		

#ifdef HOT_RESET_DEBUG_CODE_ENABLE	//如果系統支持熱復位,需要我們手工將所有的全局變量重新置初值
void SysLmallocInit(void)
{
	int i;
	
#if ENABLE_SYSMEM_DEBUG_OUT
	MemUsed = 0L;
	MemUsedPeak = 0L;
#endif
	
	Memfail = 0L;
	Allocs = 0L;
	Frees = 0L;
	Invalid = 0L;

	for(i=0; i<20; i++)
		Sizes[i] = 0L;
	
	Base = NULL;	
	First = NULL;	
	Allocp = NULL;

	Availmem = BTOU(Heapsize)-2;
}
#endif

static char ilog2(int size)
{
	
	char	i;
	int     mask = 0x80000000;
	
	for( i = 0; i < 16; i++ )
	{
		if( size & mask )
			break;
		else
			mask = mask >> 1;
	}
	
	return ( 16 - i );
}


/* Allocate block of 'nb' bytes */
void *SysLmalloc( int nb )
{
#if Memdebug
	int i;
#endif
	
	register HEADER  *p,  *q;
	register unsigned long nu;

	if(nb == 0)
		return NULL;

	Allocs++;

#if Memdebug
	/* Record the size of this request */
	if((i = ilog2(nb)) >= 0)
		Sizes[i]++;
#endif

	
	/* Round up to full block, then add one for header */
	nu = BTOU(nb);
	
	//注意:我們在這里進入臨界區,我們將調用OS提供的API關閉任務調度
	//vDisableDispatch();
	 
	/* Initialize heap pointers if necessary */
	if((q = Allocp) == NULL){
		
		//創建一個空頭。目的:當所有空間分配完時,Lfree函數需要有一個表頭
		Base = (HEADER *)heap;			//array_memory;
		Base->s.ptr = Allocp = q = Base;
		Base->s.size = 1;
		
		
		First = Base + 1;
		Base->s.ptr = First;
		First->s.ptr = Base;
		First->s.size = BTOU(Heapsize)-2;	//注意BTOU要加一,所以這里要減二(BASE用了一塊)
		
		
	}
	/* Search heap list */
	for(p = q->s.ptr; ; q = p, p = p->s.ptr){
		if(p->s.size >= nu){
			/* This chunk is at least as large as we need */
			if(p->s.size <= nu + 1){
				/* This is either a perfect fit (size == nu)
				 * or the SysLfree chunk is just one unit larger.
				 * In either case, alloc the whole thing,
				 * because there's no point in keeping a SysLfree
				 * block only large enough to hold the header.
				 */
				q->s.ptr = p->s.ptr;
			} else {
				/* Carve out piece from end of entry */
				p->s.size -= nu;
				p += p->s.size;
				p->s.size = nu;
			}

			p->s.ptr = p;	/* for auditing */
			Availmem -= p->s.size;
			p++;
			
#if Memdebug
			// debug for memory test
			memset( p, 0xcc, nb );
#endif
			break;
		}

		/* We've searched all the way around the list without
		 * finding anything. 我們將返回空指針,內存分配失敗!
		 */
		
		if(p == Allocp){
			p = NULL;
			Memfail++;
			break;
		}
	}

	//注意:出臨界區,重新打開內核的調度
	//vEnableDispatch();
	
	return (void *)p;
}


/* Put memory block back on heap */
void SysLfree( void *blk )
{
	register HEADER  *p,  *q;
	unsigned int i;

	if(blk == NULL)
		return;		/* Required by ANSI */
	Frees++;
	
	p = ((HEADER  *)blk) - 1;	//p 指向該內存塊的頭部
	/* Audit check,檢查該塊內存是否是合法分配的 */
	if(p->s.ptr != p){
		Invalid++;
		return;
	}
	Availmem += p->s.size;

#if Memdebug
	/* Fill data area with pattern to detect later overwrites */
	for(i=1;i<p->s.size;i++)
		memcpy(p[i].c,Debugpat,sizeof(Debugpat));
#endif

	//注意:我們在這里進入臨界區,我們將調用OS提供的API關閉任務調度
	//vDisableDispatch();

	
 	/* Search the SysLfree list looking for the right place to insert */
	//從Allocp FreeList的頭部開始搜索
	for(q = Allocp; !(p > q && p < q->s.ptr); q = q->s.ptr){
		/* Highest address on circular list? */
		if(q >= q->s.ptr && (p > q || p < q->s.ptr))
			break;
	}
	if(p + p->s.size == q->s.ptr){
		/* Combine with front of this entry */
		//與下一個Free塊的頭部合并
		p->s.size += q->s.ptr->s.size;
		p->s.ptr = q->s.ptr->s.ptr;
		#if Memdebug 
			memcpy(q->s.ptr->c,Debugpat,sizeof(Debugpat));
		#endif
	} else {
		/* Link to front of this entry */
		//將P塊加入到FreeList(p塊的next指針指向下一塊)
		p->s.ptr = q->s.ptr;
	}
	
	//看看P塊是否可能與前一個Free塊(q塊)的尾部合并?當然如果q塊是BASE的話,我們就不合并
	if((q + q->s.size == p) && (q != Base)){
		/* Combine with end of this entry */
		q->s.size += p->s.size;
		q->s.ptr = p->s.ptr;
		#if Memdebug
			memcpy(p->c,Debugpat,sizeof(Debugpat));
		#endif
	} else {
		/* Link to end of this entry */
		//將P塊加入到FreeList(q塊的next指針指向p)
		q->s.ptr = p;
	}

	//注意:出臨界區,重新打開內核的調度
	//vEnableDispatch();
	
	return;
}

/* Move existing block to new area */
void *SysLrealloc( void *area, int size )
{
	unsigned osize;
	HEADER  *hp;
	void *pnew;
	
	if(size == 0)
		return NULL;
		
	hp = ((HEADER *)area) - 1;
	if(hp->s.ptr != hp)
		return NULL;
	
	osize = (hp->s.size -1) * ABLKSIZE;

	/* We must copy the block since freeing it may cause the heap
	 * debugging code to scribble over it.
	 */
	if((pnew = SysLmalloc(size)) != NULL)
		memcpy(pnew,area,size>osize? osize : size);
	SysLfree(area);
	return pnew;
}

/* Allocate block of cleared memory */
void *SysLcalloc( int size )
{
	register char *cp;
	
	if(size == 0)
		return NULL;
		
	if((cp = SysLmalloc(size)) != NULL)
		memset(cp,0,size);
	return cp;
}


/* Version of SysLmalloc() that waits if necessary for memory to become available */
/*
void *
SysLmallocw(nb)
WORD nb;
{
	register void *p;

	if(nb == 0)
		return NULL;
		
	while((p = SysLmalloc(nb)) == NULL){
		Memwait++;
		twai_sem(Memsem, TMO_FEVR);
    	Memwait--;
	}
	return p;
}
*/

/* Version of calloc that waits if necessary for memory to become available */
/*
void *
Lcallocw(size)
unsigned size;	// Size of each element 
{
	register char *cp;
	
	if(size == 0)
		return NULL;
		
	cp = SysLmallocw(size);
	memset(cp,0,size);
	return cp;
}
*/
/* Print heap stats : only for debug */
/*
int
dostat(void)
{
	int i;

	printf("heap size %lu avail %lu (%lu%%) \n",
	 Heapsize,Availmem * ABLKSIZE,100L*Availmem*ABLKSIZE/Heapsize);
	
	printf("allocs %lu frees %lu (diff %lu) alloc fails %lu invalid frees %lu\n",
		Allocs,Frees,Allocs-Frees,Memfail,Invalid);
	printf("\n");
	return 0;
}
*/

/* Print heap Lfree list */
/*
int
dofreelist(void)
{
	HEADER  *p;
	int i = 0;
	int j;
	unsigned corrupt;
	int i_state;

	for(p = Base->s.ptr;p != (HEADER  *)Base;p = p->s.ptr){
		corrupt = 0;
		if(Memdebug){
			//i_state = dirps();
			for(j=1;j<p->s.size;j++){
				if(memcmp(p[j].c,Debugpat,sizeof(Debugpat)) != 0){
					corrupt = j;
					break;
				}
			}
			//restore(i_state);
		}
		if(corrupt)
			printf("%p %6lu C: %u",p,(p->s.size - 1) * ABLKSIZE,corrupt);
		else
			printf("%p %6lu",p,(p->s.size - 1) * ABLKSIZE);

		if(++i == 4){
			i = 0;
			if(printf("\n") == EOF)
				return 0;
		} else
			printf(" | ");
	}
	if(i != 0)
		printf("\n");
	return 0;
}


int
dosizes(void)

{
	int i;

	for(i=0;i<16;i += 4){
		printf("N>=%5u:%7ld| N>=%5u:%7ld| N>=%5u:%7ld| N>=%5u:%7ld\n",
		 1<<i,Sizes[i],	2<<i,Sizes[i+1],
		 4<<i,Sizes[i+2],8<<i,Sizes[i+3]);
	}
	return 0;
}

*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区三区在线观看免费视频 | 欧美三级日本三级少妇99| 国产福利电影一区二区三区| 蜜臀久久99精品久久久久宅男| 午夜精品一区二区三区免费视频 | 欧美成人三级电影在线| 欧美一区二区播放| 日韩一本二本av| 欧美精品一区二区三| 久久综合九色综合97婷婷| 日韩精彩视频在线观看| 日韩久久一区二区| 亚洲欧洲成人自拍| 一区二区三区四区中文字幕| 亚洲精品乱码久久久久久日本蜜臀| 综合激情网...| 亚洲影视在线播放| 免费成人av在线播放| 老司机精品视频在线| 国产高清不卡一区| 日本高清免费不卡视频| 欧美精品xxxxbbbb| 久久婷婷成人综合色| 国产精品国产馆在线真实露脸| 亚洲乱码精品一二三四区日韩在线| 亚洲国产日韩a在线播放| 麻豆视频一区二区| 不卡高清视频专区| 欧美日韩国产123区| 26uuuu精品一区二区| 亚洲三级小视频| 日韩av一级片| 成人免费看视频| 91精品午夜视频| 欧美激情资源网| 亚洲大片免费看| 丁香激情综合五月| 91精品视频网| 亚洲精品五月天| 国产精品中文字幕日韩精品| 欧美视频自拍偷拍| 国产欧美日本一区二区三区| 日日骚欧美日韩| 91免费国产在线观看| 欧美r级电影在线观看| 亚洲精品欧美二区三区中文字幕| 久久精品国产999大香线蕉| 99re热这里只有精品免费视频| 777久久久精品| 亚洲免费观看高清完整版在线| 久久av资源网| 欧美日韩精品免费观看视频| 亚洲人成精品久久久久久| 狠狠色丁香久久婷婷综| 欧美人妇做爰xxxⅹ性高电影| 国产精品婷婷午夜在线观看| 狠狠色伊人亚洲综合成人| 欧美日韩国产一区| 伊人婷婷欧美激情| 91浏览器在线视频| 国产无一区二区| 国产一区二区精品在线观看| 337p亚洲精品色噜噜| 亚洲午夜羞羞片| 色94色欧美sute亚洲线路一ni| 欧美韩国日本不卡| 国产成人午夜精品影院观看视频| 精品毛片乱码1区2区3区 | 2014亚洲片线观看视频免费| 三级亚洲高清视频| 在线成人高清不卡| 亚洲第一在线综合网站| 在线视频观看一区| 亚洲女与黑人做爰| 欧美综合天天夜夜久久| 一区二区三区四区高清精品免费观看| 99精品黄色片免费大全| ...av二区三区久久精品| 91丨九色porny丨蝌蚪| 国产精品热久久久久夜色精品三区| 国产精品99久久久久久有的能看| 久久免费电影网| 波多野结衣一区二区三区| 中文字幕免费一区| 99热这里都是精品| 亚洲一区二区视频在线观看| 欧美精品久久一区二区三区| 麻豆精品蜜桃视频网站| 国产亚洲一区二区三区四区| proumb性欧美在线观看| 亚洲黄色免费电影| 3d动漫精品啪啪一区二区竹菊| 免费人成黄页网站在线一区二区| 精品裸体舞一区二区三区| 国产丶欧美丶日本不卡视频| 亚洲女人小视频在线观看| 欧美日韩成人综合| 久久爱www久久做| 18欧美乱大交hd1984| 欧美伦理视频网站| 国产精品12区| 亚洲国产成人高清精品| 久久久久成人黄色影片| 日本韩国一区二区三区| 精品一区二区三区在线观看 | 国产麻豆精品95视频| 中文字幕亚洲精品在线观看| 欧美军同video69gay| 国产一区二区三区| 亚洲在线中文字幕| 国产午夜精品一区二区三区嫩草 | 一区二区激情小说| 欧美大片免费久久精品三p| 国产精品99久久久久久有的能看| 亚洲精品国产精品乱码不99| 欧美成人一区二区三区片免费| 91在线视频网址| 国产一区二区三区不卡在线观看 | 精品成人一区二区三区四区| 97精品视频在线观看自产线路二| 日韩精品福利网| 亚洲人成7777| 久久久青草青青国产亚洲免观| 欧美日韩精品一区二区| 99九九99九九九视频精品| 免费视频最近日韩| 亚洲国产视频a| 国产精品的网站| 国产无人区一区二区三区| 欧美一区二区国产| 欧美日韩国产另类一区| 91丝袜国产在线播放| 成人毛片在线观看| 国产成人免费在线观看不卡| 麻豆免费看一区二区三区| 午夜a成v人精品| 日韩毛片一二三区| 中文字幕一区在线观看视频| 久久嫩草精品久久久精品一| 精品久久久久一区| 日韩一区二区三区av| 欧美日韩1234| 欧美精品亚洲二区| 欧美视频中文一区二区三区在线观看| av中文字幕亚洲| 成人99免费视频| 成人av中文字幕| 本田岬高潮一区二区三区| 高清国产一区二区| 成人app软件下载大全免费| 国产69精品久久久久毛片| 懂色av一区二区三区免费观看 | 毛片基地黄久久久久久天堂| 日韩国产高清影视| 亚洲bt欧美bt精品| 五月婷婷另类国产| 日韩国产精品久久久| 蜜桃传媒麻豆第一区在线观看| 日本午夜精品视频在线观看| 蜜臂av日日欢夜夜爽一区| 黄页视频在线91| 国产成人av电影在线| 成人在线视频一区| 91亚洲男人天堂| 欧美日韩国产综合一区二区 | 中文在线免费一区三区高中清不卡| 久久青草欧美一区二区三区| 国产精品少妇自拍| 亚洲人精品一区| 天天综合网 天天综合色| 美女网站视频久久| 国产成人免费xxxxxxxx| 97国产精品videossex| 欧美日韩中字一区| 精品久久久久久久久久久院品网 | 久久精品二区亚洲w码| 国产一区二区主播在线| 国产不卡高清在线观看视频| 色先锋久久av资源部| 制服.丝袜.亚洲.另类.中文| 国产三区在线成人av| 一区二区在线看| 韩国一区二区三区| 99视频精品全部免费在线| 欧美精品xxxxbbbb| 中文字幕不卡在线| 午夜不卡av免费| 丁香五精品蜜臀久久久久99网站| 色哟哟一区二区在线观看| 欧美一区二区在线不卡| 国产精品美日韩| 蜜桃视频第一区免费观看| 97成人超碰视| 久久亚洲免费视频| 性做久久久久久免费观看欧美| 国产精品白丝jk白祙喷水网站 | 国产亚洲欧美日韩俺去了| 亚洲综合图片区| 成人小视频在线| 日韩精品中文字幕在线一区|