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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? memory_management.cpp

?? 擴展的動態(tài)內(nèi)存機制 任務(wù)綜述 本任務(wù)擴展了自己私有的內(nèi)存管理機制。首先使用預(yù)先規(guī)劃的思想
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "vxworks.h"
#include "stdio.h"
#include "semlib.h"
#include "tasklib.h"
#include "msgQLib.h"
#include "logLib.h"

/* 參數(shù)定義 */
#define MAX_BUF_NUM		256				/* 內(nèi)存池消息隊列最大內(nèi)存?zhèn)€數(shù)*/
#define STACK_SIZE		20000				/* 任務(wù)堆棧大小 */
#define MAX_LOG_MSGS	100					/* 最大logMsg個數(shù) */
#define MAX_ALLOC_NUM   50					/* 一次申請最多*/



/* 全局變量的定義 */
unsigned int alloc_num_Buffer_16, alloc_num_Buffer_256;		/* 預(yù)先設(shè)置16和256的緩沖池大小 */

char *pbuf16_store[256];					/* 用來存放已經(jīng)申請的16內(nèi)存塊地址 */
int buf_16_num = 0;

char *pbuf256_store[256];					/* 用來存放已經(jīng)申請的256內(nèi)存塊地址 */
int buf_256_num = 0;

char *pbufsys_store[256];					/* 用來存放已經(jīng)申請的系統(tǒng)內(nèi)存塊地址 */
int buf_sys_num = 0;



/* 消息隊列ID */
MSG_Q_ID msgQId_pool16;						/* 存放靜態(tài)16內(nèi)存池塊地址的消息隊列 */
MSG_Q_ID msgQId_pool256;					/* 存放靜態(tài)256內(nèi)存池塊地址的消息隊列 */

/* 消息結(jié)構(gòu) */
typedef struct _PBUFFER
{
	char *buffer;
}PBUFFER;


/* 內(nèi)存分區(qū)ID */
char *pTotalPool;
PART_ID pPart16;
PART_ID pPart256;


/* LogMsg */
#ifdef INCLUDE_LOGGING
logInit(consolefd, MAX_LOG_MSGS);
#endif

/* 任務(wù)標(biāo)識 */
int tidTask1;

/* 互斥信號量標(biāo)識 */
SEM_ID semId = NULL;						/* 保證臨界資源的安全 */


/* 函數(shù)聲名 */
STATUS tTask1();							/* 任務(wù)1 */
STATUS Total_MemPool_Initial();				/* 初始化靜態(tài)內(nèi)存池函數(shù) */
STATUS bufGet(unsigned int &alloc_buf_size, unsigned int &alloc_num);	/* 申請內(nèi)存塊函數(shù) */
STATUS bufReturn(unsigned int &buffer_type,unsigned int &free_num);		/* 釋放內(nèi)存塊函數(shù) */
STATUS bufStatus();														/* 查看內(nèi)存使用情況函數(shù) */
STATUS exit();															/* 系統(tǒng)退出函數(shù) */


/****************************************************************************/
/************************** 程序入口函數(shù) progStart **************************/
/****************************************************************************/

STATUS progStart(void)
{
	/* 創(chuàng)建互斥信號量 */
	semId = semBCreate(SEM_Q_FIFO,SEM_FULL);

	/* 創(chuàng)建內(nèi)存池消息隊列 */
	msgQId_pool16 = msgQCreate(MAX_BUF_NUM, sizeof(PBUFFER), MSG_Q_FIFO);	/* 16內(nèi)存緩沖池 */
	if(msgQId_pool16 == NULL)
		return (ERROR);

	msgQId_pool256 = msgQCreate(MAX_BUF_NUM, sizeof(PBUFFER), MSG_Q_FIFO);	/* 256內(nèi)存緩沖池 */
	if(msgQId_pool256 == NULL)
		return (ERROR);

	/* 創(chuàng)建進程 */
	tidTask1 = taskSpawn("tTask1", 200, 0, STACK_SIZE, (FUNCPTR)tTask1,	/*創(chuàng)建Task1進程 優(yōu)先級220*/
		0, 0, 0, 0, 0, 0, 0, 0, 0, 0);

	return (OK);
}

/****************************************************************************/
/**************************** 系統(tǒng)主進程 tTask1 *****************************/
/****************************************************************************/

STATUS tTask1()
{
	int option;		/* 用戶選擇操作 */

	/* 調(diào)用初始化靜態(tài)內(nèi)存池函數(shù) */
	if(Total_MemPool_Initial() == ERROR)
	{
		printf("\nERROR: Memory pool failed to initialize.\n");
		return (ERROR);
	}

	FOREVER
	{
		/* 等待用戶選擇操作 */
		/* 操作1: Alloc Buffers -- 申請若干個自定義大小的內(nèi)存塊 */
		/* 操作2: Free Buffers  -- 釋放若干個自定義類型的內(nèi)存塊 */
		/* 操作3: Status	    -- 查看當(dāng)前內(nèi)存池使用狀態(tài) */
		/* 操作4: Exit			-- 釋放內(nèi)存池并退出系統(tǒng) */
		printf("\nPlease choose your option: (1~4)\n1.\tAlloc Buffers\n2.\tFree buffers\n3.\tStatus\n4.\tExit\n");
		scanf("%d",&option);
		/* 判斷用戶輸入 */
		switch (option) {
			/* 如果選擇1 */
			case 1:
				/* 用戶輸入需要申請的內(nèi)存塊大小和個數(shù) */
				unsigned int alloc_buf_size;			/* 需要申請內(nèi)存塊大小 */
				unsigned int alloc_num;					/* 需要申請內(nèi)存塊個數(shù) */

				printf("Please Input the SIZE of the buffer to alloc:\n");
				scanf("%u",&alloc_buf_size);
				printf("Please Input the AMOUNT of buffers to alloc:\n");
				scanf("%u",&alloc_num);

				/* 調(diào)用bufGet()即申請內(nèi)存塊函數(shù) */
				if(bufGet(alloc_buf_size,alloc_num) == ERROR)
				{
					printf("\nERROR: Memory allocation Fail.\n");
					return (ERROR);
				}
				break;
			/* 如果選擇2 */
			case 2:
				/* 用戶輸入需要釋放的內(nèi)存塊類型和個數(shù) */
				unsigned int buffer_type;				/* 釋放類型 */
				unsigned int free_num;					/* 釋放個數(shù) */
				printf("Please Input the TYPE of buffer to free:\n 1. 16_buffer\t2. 256_buffer\t3. system buffer\n");
				scanf("%u",&buffer_type);

				/* 如果是釋放系統(tǒng)內(nèi)存則默認全部刪除 */
				if(buffer_type == 1 || buffer_type == 2)
				{
					printf("Please Input the AMOUNT of buffers to free:\n");
					scanf("%u",&free_num);
				}
				/* 調(diào)用bufReturn()即內(nèi)存釋放函數(shù) */
				if(bufReturn(buffer_type, free_num) == ERROR)
				{
					printf("\nERROR: Memory Free Fail.\n");
					return (ERROR);
				}
				break;
			/* 如果選擇3 */
			case 3:
				/* 調(diào)用bufStatus()即監(jiān)視函數(shù) */
				if(bufStatus()== ERROR)
				{
					printf("\nERROR: Status Check fail.\n");
					return (ERROR);
				}
				break;
			/* 如果選擇4 */
			case 4:
				/* 調(diào)用系統(tǒng)退出函數(shù) */
				if(exit() == ERROR)
				{
					return (ERROR);
				}
				break;
			/* 其它 */
			default:
				printf("Wrong Input, Try again.\n");
				break;
		}
	}
	return (OK);
}

/****************************************************************************/
/******************** 功能函數(shù) Total_MemPool_Initial() **********************/
/****************************************************************************/

/* 實現(xiàn)功能: 根據(jù)用戶配置的大小初始化兩個不同類型的內(nèi)存池, */
/* 分別為大小為16和大小為256的內(nèi)存池,保存內(nèi)存池中各內(nèi)存    */
/* 塊的首地址,并發(fā)送到已經(jīng)創(chuàng)建的兩個內(nèi)存池消息隊列中.      */

STATUS Total_MemPool_Initial()
{
	/* 初始化參數(shù)和消息發(fā)送對象 */
	int Total_MemPool_Size;
	PBUFFER pBuff16_sd;
	PBUFFER pBuff256_sd;

	/* 提示用戶輸入兩種類型內(nèi)存池的大小 */
	printf("\n****************************Initialization*****************************\n");
	printf("Please Input the amount of 16 buffers.(3~256)\n");
	scanf("%d",&alloc_num_Buffer_16);
	printf("Please Input the amount of 256 buffers.(3~256)\n");
	scanf("%d",&alloc_num_Buffer_256);

	semTake(semId, WAIT_FOREVER);			/* 互斥信號量 */

	/* 初始化內(nèi)存池 */
	if(alloc_num_Buffer_16 >= 3 && alloc_num_Buffer_256 >= 3
		&& alloc_num_Buffer_16 <= MAX_BUF_NUM 
		&& alloc_num_Buffer_256 <= MAX_BUF_NUM)          /* 判斷輸入大小,合法為3~MAX_BUF_NUM個 */
	{
		/* 申請總內(nèi)存池pTotalPool */
		Total_MemPool_Size = (16+8) * alloc_num_Buffer_16 + (256+8) * alloc_num_Buffer_256 + 10000;
		pTotalPool = (char *)malloc(Total_MemPool_Size);
		
		/* 在總內(nèi)存池當(dāng)中創(chuàng)建兩個分區(qū) */
		pPart16 = memPartCreate((char*)pTotalPool, (16+8) * alloc_num_Buffer_16);
		pPart256 = memPartCreate((char*)pTotalPool, (256+8) * alloc_num_Buffer_256 + 10000);

		/* 初始化塊大小為16的內(nèi)存池 */
		/* 在分區(qū)中分配內(nèi)存塊,并輸出地址 */
		printf("\n16_Buffer address:\n");		
		for(int i = 0; i < alloc_num_Buffer_16; ++i)
		{
			pBuff16_sd.buffer = (char*)memPartAlloc(pPart16, 16);
			printf("0x%07x\t",pBuff16_sd.buffer);
			if((i + 1) % 5 == 0)
				printf("\n");
			/* 將申請到的內(nèi)存塊地址發(fā)送到對應(yīng)的內(nèi)存池消息對列中 */
			if(msgQSend(msgQId_pool16,(char*)&pBuff16_sd, sizeof(PBUFFER), WAIT_FOREVER, MSG_PRI_NORMAL) == ERROR)
			{
				printf("Buffer 16 allocation failed.\n");
				return (ERROR);
			}
		}

		/* 初始化塊大小為256的內(nèi)存池 */
		/* 同上 */
		printf("\n256_Buffer address:\n");
		for(int j = 0; j < alloc_num_Buffer_256; ++j)
		{
			pBuff256_sd.buffer = (char*)memPartAlloc(pPart256, 256);
			printf("0x%07x\t",pBuff256_sd.buffer);
			if((j + 1) % 5 == 0)
				printf("\n");
			if(msgQSend(msgQId_pool256, (char*)&pBuff256_sd, sizeof(PBUFFER), WAIT_FOREVER, MSG_PRI_NORMAL) == ERROR)
			{
				printf("Buffer 256 allocation failed.\n");
				return (ERROR);
			}
		}
		printf("\n*************************************************\nYou have successfully allocated Total Memory Pool\nwith %d 16_buffers and %d 256_buffers.\nNow Program Starting......\n*************************************************\n", alloc_num_Buffer_16, alloc_num_Buffer_256);
	} else {
		printf("Total Memory Pool allocation failed.\nPlease input the valid amount of buffers.\n");
		return (ERROR);
	}

	semGive(semId);							/* 互斥信號量 */

	return (OK);
}

/****************************************************************************/
/**************************** 功能函數(shù) bufGet() *****************************/
/****************************************************************************/

/* 實現(xiàn)功能: 按照用戶需求分配若干個自定義大小內(nèi)存塊, */
/* 并輸出分配到的內(nèi)存塊的地址.內(nèi)存的分配實現(xiàn)統(tǒng)一管理 */

STATUS bufGet(unsigned int &alloc_buf_size, unsigned int &alloc_num)
{
	/* 初始化接收消息對象 */
	PBUFFER pBuff16_rc;
	PBUFFER pBuff256_rc;

	/* 內(nèi)存申請 */
	/* 1.如果申請內(nèi)存塊大小小于16 */
	if(alloc_buf_size > 0 && alloc_buf_size <= 16)		
	{
		/* 如果需要分配的內(nèi)存塊個數(shù)小于當(dāng)前16內(nèi)存池中未分配內(nèi)存塊的個數(shù)	*/
		/* 則直接在16內(nèi)存池中申請 */
		if(alloc_num > 0 && alloc_num <= msgQNumMsgs(msgQId_pool16)) 
		{
			for(int i = 0; i < alloc_num; ++i)
			{
				/* 從消息隊列中接收內(nèi)存塊地址 */
				if(msgQReceive(msgQId_pool16, (char*)&pBuff16_rc, sizeof(PBUFFER), WAIT_FOREVER)==ERROR)
				{
					return(ERROR);
				}
				/* 將已分配地址保存并輸出 */
				pbuf16_store[buf_16_num] = pBuff16_rc.buffer;
				printf("0x%07x\t",pbuf16_store[buf_16_num]);
				++buf_16_num;
				if((i + 1) % 5 == 0)
					printf("\n");
			}
			/* 內(nèi)存不足告警提示信息 */
			if(msgQNumMsgs(msgQId_pool16) <= 3)
			{
				printf("\nCAUTION:You got %d 16_buffer left.\n",msgQNumMsgs(msgQId_pool16));
			}

		/* 如果需要分配的內(nèi)存塊個數(shù)大于當(dāng)前16內(nèi)存池未分配內(nèi)存塊的個數(shù),	*/
		/* 但小于16內(nèi)存池和256內(nèi)存池中未分配的內(nèi)存總數(shù)之和,則先在16內(nèi)存	*/
		/* 池中申請完所有的內(nèi)存塊,再在256內(nèi)存池中申請剩下的內(nèi)存塊		*/
		} else if (alloc_num > msgQNumMsgs(msgQId_pool16) 
			&& alloc_num <= msgQNumMsgs(msgQId_pool16) + msgQNumMsgs(msgQId_pool256)) {

				int b16_num = msgQNumMsgs(msgQId_pool16);
				int b256_num = alloc_num - msgQNumMsgs(msgQId_pool16);
				printf("\nCAUTION:No 16_buffer left. So 256_buffer will be used.\n");
				printf("16_buffer address:\n");
				
				/* 先在16內(nèi)存池中申請 */
				for(int i = 0; i < b16_num; ++i)
				{
					/* 從消息隊列中接收內(nèi)存塊地址 */
					if(msgQReceive(msgQId_pool16,(char*)&pBuff16_rc,sizeof(PBUFFER),WAIT_FOREVER)==ERROR)
					{
						return(ERROR);
					}
					/* 將已分配地址保存并輸出 */
					pbuf16_store[buf_16_num] = pBuff16_rc.buffer;
					printf("0x%07x\t",pbuf16_store[buf_16_num]);
					++buf_16_num;
					if((i + 1) % 5 == 0)

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线一区观看| 欧美男女性生活在线直播观看 | 9色porny自拍视频一区二区| 国产一区二区精品在线观看| 韩国欧美国产一区| 国产一区二区三区日韩| 国产最新精品免费| 东方欧美亚洲色图在线| 粉嫩蜜臀av国产精品网站| 99精品久久只有精品| 日本福利一区二区| 欧美日韩另类一区| 欧美乱妇一区二区三区不卡视频 | 国产午夜精品久久久久久久 | 午夜欧美在线一二页| 一区二区三区美女| 亚洲va欧美va人人爽午夜| 石原莉奈一区二区三区在线观看| 亚洲成av人**亚洲成av**| 老汉av免费一区二区三区| 国产伦精品一区二区三区免费迷| 成人黄色片在线观看| 在线看日本不卡| 欧美一区二区国产| 国产午夜精品久久久久久久| 亚洲欧美日韩系列| 日本中文一区二区三区| 国产河南妇女毛片精品久久久| 成av人片一区二区| 欧美色成人综合| 精品国产sm最大网站免费看| 久久久综合精品| 亚洲视频狠狠干| 日韩精品福利网| 国产suv精品一区二区三区| 色综合久久综合| 欧美一级国产精品| 久久精品一区二区| 亚洲综合在线电影| 久久精品国产秦先生| 成人免费av在线| 欧美人狂配大交3d怪物一区| 久久一区二区视频| 亚洲综合久久av| 久久aⅴ国产欧美74aaa| 99精品久久免费看蜜臀剧情介绍| 欧美日韩国产高清一区二区三区 | 色婷婷久久99综合精品jk白丝| 欧美精品vⅰdeose4hd| 国产欧美精品在线观看| 亚洲最色的网站| 国产精品综合在线视频| 欧美日韩一级片在线观看| 久久久久久久久久久久久夜| 亚洲精品视频观看| 国产呦精品一区二区三区网站| 欧美亚洲丝袜传媒另类| 国产日韩成人精品| 美女www一区二区| 91福利区一区二区三区| 久久精品一区二区三区不卡| 国产欧美视频一区二区| 日韩一区二区三区免费看| 国产欧美一区二区精品久导航| 亚洲一区二区三区视频在线播放| 国产成人av资源| 69堂成人精品免费视频| 国产偷国产偷精品高清尤物 | 免费观看日韩av| 菠萝蜜视频在线观看一区| 欧美电视剧免费观看| 亚洲国产精品欧美一二99| 成人免费看片app下载| 日韩美一区二区三区| 亚洲高清中文字幕| 91一区二区在线| 国产日韩欧美制服另类| 日韩国产欧美一区二区三区| 日本韩国一区二区三区视频| 欧美国产精品一区二区三区| 激情成人午夜视频| 日韩丝袜情趣美女图片| 性欧美大战久久久久久久久| 北条麻妃国产九九精品视频| 精品福利一区二区三区| 洋洋成人永久网站入口| 成人av电影免费在线播放| 久久综合国产精品| 久久精品久久综合| 欧美日韩美少妇| 性欧美疯狂xxxxbbbb| 在线视频综合导航| 亚洲免费资源在线播放| 91在线porny国产在线看| 欧美国产乱子伦| 成人午夜视频免费看| 国产亚洲精品免费| 国产精品99久久久| 久久久99精品久久| 国产一区二区三区美女| 精品成人a区在线观看| 精品一区二区三区在线播放| 日韩欧美一二三| 九一九一国产精品| 精品成人在线观看| 国产自产2019最新不卡| 久久久91精品国产一区二区精品 | 天天综合色天天综合| 欧美日韩高清一区| 午夜电影久久久| 51午夜精品国产| 九一久久久久久| 欧美高清一级片在线观看| 国产成人精品免费一区二区| 国产欧美日韩在线观看| 成人黄色在线看| 亚洲精品视频在线| 欧美日韩国产123区| 久久国产精品无码网站| 久久午夜色播影院免费高清| 福利一区二区在线| 亚洲日本在线观看| 欧美色大人视频| 午夜精品久久久久久久久| 日韩午夜在线观看| 福利电影一区二区| 亚洲精品第一国产综合野| 在线成人av网站| 狠狠色丁香九九婷婷综合五月 | 国产精品综合一区二区三区| 国产精品三级在线观看| 日本高清不卡aⅴ免费网站| 免费在线看一区| 国产精品久久久久久久久久免费看| 色综合久久综合网97色综合| 热久久免费视频| 国产蜜臀av在线一区二区三区| 色狠狠桃花综合| 激情六月婷婷综合| |精品福利一区二区三区| 91精品啪在线观看国产60岁| 成人免费视频caoporn| 午夜精品久久久久久久久久久| 国产亚洲欧洲997久久综合 | 欧美成人午夜电影| 不卡一区中文字幕| 日韩高清一级片| 国产精品久久一卡二卡| 欧美福利视频一区| 粉嫩一区二区三区性色av| 亚洲制服丝袜一区| 久久中文娱乐网| 色婷婷久久综合| 国产精品影视在线观看| 亚洲福利一区二区三区| 久久在线观看免费| 欧美人妇做爰xxxⅹ性高电影| 成人性生交大片免费看中文| 美日韩一级片在线观看| 蜜桃一区二区三区四区| 中文字幕色av一区二区三区| 亚洲永久精品大片| 精品国产一区二区国模嫣然| 色老头久久综合| 国产精品乡下勾搭老头1| 亚洲国产成人高清精品| 国产日本亚洲高清| 欧美一级国产精品| 色妹子一区二区| 国产高清成人在线| 蜜桃久久精品一区二区| 亚洲一区二区三区中文字幕在线| 欧美国产乱子伦| 久久免费看少妇高潮| 欧美精品在线观看一区二区| 97精品电影院| 成人深夜在线观看| 狠狠色狠狠色综合| 日韩电影在线免费观看| 一区二区国产视频| 国产精品久久久久影院| 国产日韩精品一区| 久久久国产精品不卡| 日韩一区二区免费在线电影| 欧美视频一二三区| 91色婷婷久久久久合中文| 国产a精品视频| 国产一区二区三区在线观看免费 | 日韩精品一区二区三区视频在线观看| 欧美在线免费视屏| 久久久久9999亚洲精品| 色婷婷精品大在线视频| 成人精品高清在线| 国产福利精品导航| 国内精品久久久久影院一蜜桃| 日韩国产精品久久久久久亚洲| 天堂久久久久va久久久久| 亚洲一区二区五区| 亚洲国产精品影院| 亚洲一区二区精品视频|