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

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

?? memory_management.cpp

?? 擴展的動態內存機制 任務綜述 本任務擴展了自己私有的內存管理機制。首先使用預先規劃的思想
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
						printf("\n");
				}
				/* 剩下的部分在256內存池中申請 */
				printf("\n256_buffer address:\n");
				for(int j = 0; j < b256_num; ++j)
				{
					/* 從消息隊列中接收內存塊地址 */
					if(msgQReceive(msgQId_pool256,(char*)&pBuff256_rc,sizeof(PBUFFER),WAIT_FOREVER)==ERROR)
					{
						return(ERROR);
					}
					/* 將已分配地址保存并輸出 */
					pbuf256_store[buf_256_num] = pBuff256_rc.buffer;
					printf("0x%07x\t",pbuf256_store[buf_256_num]);
					++buf_256_num;
					if((j + 1) % 5 == 0)
						printf("\n");
				}
				/* 內存不足告警提示信息 */
				if(msgQNumMsgs(msgQId_pool256) <= 3)
				{
					printf("\nCAUTION:You got %d 256_buffer left.\n",msgQNumMsgs(msgQId_pool256));
				}

		/* 如果需要分配的內存塊個數大于當前16內存池和256內存池中未分配 */
		/* 內存總數之和,則在靜態內存池外的系統內存池中申請	*/
		} else if(alloc_num > msgQNumMsgs(msgQId_pool16) + msgQNumMsgs(msgQId_pool256) && alloc_num < MAX_ALLOC_NUM) {
			printf("CAUTION:Too many buffers to alloc in Buffer Pool.\nAlloc in System Memory Pool\n");
			for(int i = 0; i < alloc_num; ++i)
			{
				semTake(semId, WAIT_FOREVER);			/* 互斥信號量 */
				pbufsys_store[buf_sys_num] = (char*)malloc(alloc_buf_size);
				semGive(semId);

				/* 將已分配地址保存并輸出 */
				printf("0x%07x\t",pbufsys_store[buf_sys_num]);
				++buf_sys_num;
				if((i + 1) % 5 == 0)
					printf("\n");
			}
		} else {
			printf("ERROR: Please Input a valid number.\n");		
		}

	/* 2.如果申請內存塊大小大于16小于256 */
	} else if(alloc_buf_size > 16 && alloc_buf_size <= 256) {

		/* 如果需要分配的內存塊個數小于當前256內存池未分配內存塊的個數, */
		/* 直接在256內存池中申請 */
		if(alloc_num > 0 && alloc_num <= msgQNumMsgs(msgQId_pool256))
		{
			for(int i = 0; i < alloc_num; ++i)
			{
				/* 從消息隊列中接收內存塊地址 */
				if(msgQReceive(msgQId_pool256,(char*)&pBuff256_rc,sizeof(PBUFFER),WAIT_FOREVER)==ERROR)
				{
					return(ERROR);
				}

				/* 將已分配地址保存并輸出 */
				pbuf256_store[buf_256_num] = pBuff256_rc.buffer;
				printf("0x%07x\t",pbuf256_store[buf_256_num]);
				++buf_256_num;
				if((i + 1) % 5 == 0)
					printf("\n");
			}

			if(msgQNumMsgs(msgQId_pool256) <= 3)
			{
				printf("\nCAUTION:You got %d 256_buffer left.\n",msgQNumMsgs(msgQId_pool256));
			}

		/* 如果需要分配的內存塊個數大于當前256內存池未分配內存塊的個數, */
		/* 則直接在系統內存池中申請 */
		} else if(alloc_num > msgQNumMsgs(msgQId_pool256) && alloc_num < MAX_ALLOC_NUM) {
			printf("CAUTION:Too many buffers to alloc in Buffer Pool.\nAlloc in System Memory Pool.\n");
			for(int i = 0; i < alloc_num; ++i)
			{
				semTake(semId, WAIT_FOREVER);			/* 互斥信號量 */
				pbufsys_store[buf_sys_num] = (char*)malloc(alloc_buf_size);
				semGive(semId);

				/* 將已分配地址保存并輸出 */
				printf("0x%07x\t",pbufsys_store[buf_sys_num]);
				++buf_sys_num;
				if((i + 1) % 5 == 0)
					printf("\n");
			}
		} else {
			printf("ERROR: Please Input a valid number.\n");	
		}

	/* 3.如果申請內存塊大小大于256 */
	/* 直接在系統內存池中申請	   */
	} else if(alloc_buf_size > 256 && alloc_buf_size < 10000) {
		
		if(alloc_num > 0 && alloc_num < MAX_ALLOC_NUM)
		{
			for(int i = 0; i < alloc_num; ++i)
			{
				pbufsys_store[buf_sys_num] = (char*)malloc(alloc_buf_size);
				printf("0x%07x\t",pbufsys_store[buf_sys_num]);
				++buf_sys_num;
				if((i + 1) % 5 == 0)
					printf("\n");
			}
		} else {
			printf("ERROR: Please Input a valid Number.\n");			
		}

	} else {
		printf("ERROR: Please Input a valid Size.\n");		
	}
	return (OK);
}

/****************************************************************************/
/************************* 功能函數 bufReturn() *****************************/
/****************************************************************************/

/* 實現功能: 按照用戶需求釋放若干個自定義類型的內存塊,  */
/* 并輸出釋放的內存塊的地址.可以釋放的內存塊類型為三種: */
/* 1. 16_buffer  -- 大小為16的內存塊   */
/* 2. 256_buffer -- 大小為256的內存塊  */
/* 3. sys_buffer -- 已申請的系統內存塊 */

STATUS bufReturn(unsigned int &buffer_type,unsigned int &free_num)
{
	/* 初始化發送消息對象 */
	PBUFFER pBuff16_sd;
	PBUFFER pBuff256_sd;

	/* 判斷用戶選擇 */
	switch (buffer_type) {
		/* 如果選擇的是1. 16_buffer */
		case 1:

			/* 如果用戶需要釋放的內存塊個數小于已分配的內存塊個數 */
			/* 則直接釋放 */
			if(free_num > 0 && free_num <= buf_16_num)
			{
				printf("Freed 16_buffer address:\n");
				for(int i = 0; i < free_num; ++i)
				{
					/* 查詢已分配的內存塊地址 */
					pBuff16_sd.buffer = pbuf16_store[--buf_16_num];
					printf("0x%07x\t",pBuff16_sd.buffer);
					if((i + 1) % 5 == 0)
						printf("\n");

					/* 通過發送到消息隊列中實現內存釋放 */
					if(msgQSend(msgQId_pool16,(char*)&pBuff16_sd, sizeof(PBUFFER), WAIT_FOREVER, MSG_PRI_NORMAL) == ERROR)
					{
						printf("16_Buffer free failed.\n");
						return (ERROR);
					}
				}
			/* 如果用戶需要釋放的內存塊個數大于已分配的內存塊個數 */
			/* 則釋放全部已分配的內存塊	 */
			} else if(free_num > buf_16_num) {
				printf("There are only %u 16_buffers can be freed.\nFreed 16_buffer address:\n", buf_16_num);
				free_num = buf_16_num;
				for(int i = 0; i < free_num; ++i)
				{
					pBuff16_sd.buffer = pbuf16_store[--buf_16_num];
					printf("0x%07x\t",pBuff16_sd.buffer);
					if((i + 1) % 5 == 0)
						printf("\n");
					/* 通過發送到消息隊列中實現內存釋放 */
					if(msgQSend(msgQId_pool16,(char*)&pBuff16_sd, sizeof(PBUFFER), WAIT_FOREVER, MSG_PRI_NORMAL) == ERROR)
					{
						printf("16_Buffer free failed.\n");
						return (ERROR);
					}
				}
			} else {
				printf("Please input a valid Number.\n");
			}
			break;
		/* 如果選擇的是2. 256_buffer	 */
		/* 方法同16_buffer相同,故不再注釋*/
		case 2:
			if(free_num > 0 && free_num <= buf_256_num)
			{
				printf("Freed 256_buffer address:\n");
				for(int i = 0; i < free_num; ++i)
				{
					pBuff256_sd.buffer = pbuf256_store[--buf_256_num];
					printf("0x%07x\t",pBuff256_sd.buffer);
					if((i + 1) % 5 == 0)
						printf("\n");
					if(msgQSend(msgQId_pool256,(char*)&pBuff256_sd, sizeof(PBUFFER), WAIT_FOREVER, MSG_PRI_NORMAL) == ERROR)
					{
						printf("256_Buffer free failed.\n");
						return (ERROR);
					}
				}
			} else if(free_num > buf_256_num) {
				printf("There are only %u 256_buffers can be freed.\nFreed 256_buffer address:\n", buf_256_num);
				free_num = buf_256_num;
				for(int i = 0; i < free_num; ++i)
				{
				 	pBuff256_sd.buffer = pbuf256_store[--buf_256_num];
					printf("0x%07x\t",pBuff256_sd.buffer);
					if((i + 1) % 5 == 0)
						printf("\n");
					if(msgQSend(msgQId_pool256,(char*)&pBuff16_sd, sizeof(PBUFFER), WAIT_FOREVER, MSG_PRI_NORMAL) == ERROR)
					{
						printf("256_Buffer free failed.\n");
						return (ERROR);
					}
				}
			} else {
				printf("Please input a valid Number.\n");
			}
			break;

		/* 如果選擇的是3. sys_buffer */
		case 3:
			printf("%u System buffers will be all freed.\n Freed system buffer address:\n", buf_sys_num);
			free_num = buf_sys_num;
			for(int i = 0; i < free_num; ++i)
			{
				printf("0x%07x\t",pbufsys_store[--buf_sys_num]);
				free(pbufsys_store[buf_sys_num]);
				if((i + 1) % 5 == 0)
					printf("\n");
			}
			break;
		default:
			printf("Please input a valid Type.\n");
			break;
	}
	return (OK);
}

/****************************************************************************/
/************************* 功能函數 bufStatus() *****************************/
/****************************************************************************/

/* 實現功能: 查詢當前內存分配的信息,輸出已分配的各種類  */
/* 型的內存塊地址,并顯示當前剩余未分配的內存塊個數.     */


STATUS bufStatus()
{
	/* 顯示已分配的內存塊地址 */
	printf("\n***Allocated buffers:***\n");

	/* 若有已分配的16內存塊 */
	if(buf_16_num > 0)
	{
		/* 讀取并輸出已分配內存地址記錄 */
		printf("16_buffer address:\n");
		for(int i = 0; i < buf_16_num; ++i)
		{
			printf("0x%07x\t", pbuf16_store[i]);
			if((i + 1) % 5 == 0)
				printf("\n");
		}
	}
	/* 若有已分配的256內存塊 */
	if(buf_256_num > 0)
	{
		/* 讀取并輸出已分配內存地址記錄 */
		printf("\n256 buffer address:\n");
		for(int i = 0; i < buf_256_num; ++i)
		{
			printf("0x%07x\t", pbuf256_store[i]);
			if((i + 1) % 5 == 0)
				printf("\n");
		}
	}
	/* 若有已分配的系統內存塊 */
	if(buf_sys_num > 0)
	{
		/* 讀取并輸出已分配內存地址記錄 */
		printf("\nSystem memory address:\n");
		for(int i = 0; i < buf_sys_num; ++i)
		{
			printf("0x%07x\t", pbufsys_store[i]);
			if((i + 1) % 5 == 0)
				printf("\n");
		}
	}

	/* 顯示當前靜態內存池未分配的內存個數 */
	printf("\nThere are %u 16_buffers left.\n", msgQNumMsgs(msgQId_pool16));
	printf("There are %u 256_buffers left.\n", msgQNumMsgs(msgQId_pool256));

	return (OK);
}

/****************************************************************************/
/****************************** 功能函數 exit() *****************************/
/****************************************************************************/

/* 實現功能: 實現系統退出,釋放內存池和系統內存,刪除消息隊列, */
/* 信號量,和進程.											 */


STATUS exit()
{
	printf("\nSystem is goint to exit...\n");

	semTake(semId, WAIT_FOREVER);				/* 互斥信號量 */
	free(pTotalPool);							/* 刪除總內存池 */
	for(int i = 0; i < buf_sys_num; ++i)
	{
		free(pbufsys_store[i++]);				/* 依次刪除已分配的系統內存 */
	}
	logMsg("Free All Allocated buffers...Complete.\n",0,0,0,0,0,0);
	semGive(semId);

	semDelete(semId);							/* 刪除信號量 */

	/* 刪除消息隊列 */
	msgQDelete(msgQId_pool16);
	msgQDelete(msgQId_pool256);

	logMsg("Delete All Message queues...Complete.\n",0,0,0,0,0,0);
	logMsg("Delete All tasks...\n",0,0,0,0,0,0);	
	
	/* 刪除進程 */
	taskDelete(tidTask1);

	return (OK);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品视频网| 国产传媒欧美日韩成人| 日韩免费观看2025年上映的电影| 亚洲一区二区不卡免费| 日韩一区二区精品在线观看| 欧美日韩视频不卡| 欧美日韩一区二区三区视频| 欧美少妇bbb| 在线观看视频一区| 欧美三级视频在线播放| 欧美美女一区二区三区| 9191精品国产综合久久久久久| 欧美日韩精品一区二区在线播放| 精品视频在线免费观看| 欧美区一区二区三区| 欧美日韩中文字幕精品| 91精品国产一区二区三区香蕉| 欧美日本韩国一区| 日韩精品一区二区三区蜜臀| 欧美mv日韩mv亚洲| 久久综合九色综合97婷婷女人| 久久久久久久久久久久久女国产乱| 国产亚洲精品aa| 国产精品久久毛片a| 亚洲一区在线视频| 日本中文一区二区三区| 久久99国产精品麻豆| 国产成人免费视频网站高清观看视频| 国产成人久久精品77777最新版本| 成人爽a毛片一区二区免费| 99精品视频一区二区| 精品视频在线免费看| 精品少妇一区二区三区日产乱码| 久久精品亚洲一区二区三区浴池| 国产精品久久毛片av大全日韩| 亚洲国产另类av| 国产一区二区三区在线观看免费| 成人av在线网| 欧美日韩精品久久久| 精品国产成人在线影院 | 欧美日韩免费电影| 欧美一级日韩一级| 久久无码av三级| 亚洲日本va午夜在线影院| 性感美女极品91精品| 国精品**一区二区三区在线蜜桃| 99精品视频免费在线观看| 欧美一区二区三区四区久久| 国产欧美一区二区三区鸳鸯浴 | eeuss鲁片一区二区三区在线观看| 日本一区二区三区dvd视频在线| 日韩欧美国产一区二区三区| 男人的天堂久久精品| 国产精品一区二区x88av| 91色porny在线视频| 制服丝袜中文字幕亚洲| 中文av一区二区| 天天综合日日夜夜精品| 国产成人丝袜美腿| 欧美电影影音先锋| 最新日韩av在线| 日韩视频免费观看高清完整版在线观看 | 欧美一级理论片| 欧美激情艳妇裸体舞| 免费在线看成人av| 91啦中文在线观看| 久久先锋资源网| 日韩精品免费专区| 色哟哟一区二区| 国产清纯白嫩初高生在线观看91| 天天爽夜夜爽夜夜爽精品视频| 丁香婷婷综合网| 日韩欧美一二三区| 亚洲影视在线播放| www.久久久久久久久| xf在线a精品一区二区视频网站| 亚洲中国最大av网站| 成人精品高清在线| 久久五月婷婷丁香社区| 免费一区二区视频| 欧美日韩一级视频| 亚洲免费成人av| 成人性生交大片| 久久综合久久久久88| 日本aⅴ亚洲精品中文乱码| 91在线观看下载| 日本一区二区三区国色天香| 看片的网站亚洲| 91精品国产丝袜白色高跟鞋| 亚洲精品视频免费看| 成人av免费观看| 亚洲国产精品传媒在线观看| 国产精品一区二区久久不卡| 欧美一区日本一区韩国一区| 亚洲va欧美va天堂v国产综合| 91蜜桃网址入口| 中文字幕欧美一区| av福利精品导航| 国产精品国产三级国产三级人妇| 国产福利电影一区二区三区| 欧美大胆一级视频| 久久99精品久久久久久| 精品国产3级a| 韩国精品免费视频| 欧美精品一区二区三区很污很色的 | 日产欧产美韩系列久久99| 欧美日韩国产一级| 久久亚洲一区二区三区明星换脸| proumb性欧美在线观看| 久久99精品久久久久久动态图| 1024成人网| 日韩精品专区在线影院重磅| 国产精品18久久久久久久网站| 亚洲成国产人片在线观看| 精品三级在线看| 91小视频免费看| 青青草成人在线观看| 日本一区二区成人在线| 日韩午夜av一区| 国产成人精品免费| 色婷婷综合久久久久中文一区二区| 中文字幕一区二| 一本色道久久综合亚洲精品按摩| 亚洲免费观看高清完整版在线观看 | 成人精品视频.| **性色生活片久久毛片| 日本高清不卡一区| 亚洲国产精品嫩草影院| 欧美一区二区日韩一区二区| 韩国一区二区在线观看| 国产欧美日韩一区二区三区在线观看| 成人综合在线观看| 一区二区三区在线免费| 666欧美在线视频| 激情综合网激情| 国产精品国产三级国产aⅴ无密码| 91看片淫黄大片一级在线观看| 亚洲午夜一区二区| 日韩欧美电影在线| 成人av网址在线| 手机精品视频在线观看| www成人在线观看| 色噜噜狠狠成人中文综合| 日韩和欧美一区二区三区| 久久久蜜桃精品| 在线观看日韩一区| 九九**精品视频免费播放| 亚洲欧美在线视频| 在线不卡中文字幕播放| 国产成人精品亚洲777人妖| 亚洲一线二线三线久久久| 精品国产99国产精品| 日本韩国视频一区二区| 久久99久久精品欧美| 18涩涩午夜精品.www| 日韩三级视频中文字幕| jvid福利写真一区二区三区| 男人的j进女人的j一区| 亚洲人成在线播放网站岛国| 日韩一区二区精品在线观看| 9i看片成人免费高清| 美脚の诱脚舐め脚责91 | 亚洲女人小视频在线观看| 日韩一区二区三区免费观看| 成a人片国产精品| 日韩国产精品久久| 亚洲欧美日韩人成在线播放| 久久99久久精品欧美| 国产成人无遮挡在线视频| 亚洲欧美日韩国产综合在线| 蜜臀久久久99精品久久久久久| 国产高清无密码一区二区三区| jlzzjlzz欧美大全| 欧美不卡在线视频| 亚洲久本草在线中文字幕| 天天综合日日夜夜精品| 激情综合五月天| 91精品国产色综合久久| 五月激情综合网| 国产成人综合网| 91精品午夜视频| 午夜精品久久久久| 国产精品国产三级国产aⅴ中文| 日韩欧美一二三四区| 欧美日韩另类国产亚洲欧美一级| 国产剧情一区二区三区| 免费精品视频最新在线| 亚洲综合激情另类小说区| 国产精品久久久久久久蜜臀| 精品国产亚洲在线| 欧美一区二区三区男人的天堂| 在线免费不卡电影| 91色乱码一区二区三区| 99久久伊人精品| 国产成人亚洲精品狼色在线| 国产揄拍国内精品对白| 蜜桃久久久久久久| 久久成人羞羞网站| 免费观看30秒视频久久| 日韩av一区二区在线影视|