模擬內(nèi)存管理設(shè)計(jì)與實(shí)現(xiàn)_第1頁(yè)
模擬內(nèi)存管理設(shè)計(jì)與實(shí)現(xiàn)_第2頁(yè)
模擬內(nèi)存管理設(shè)計(jì)與實(shí)現(xiàn)_第3頁(yè)
模擬內(nèi)存管理設(shè)計(jì)與實(shí)現(xiàn)_第4頁(yè)
模擬內(nèi)存管理設(shè)計(jì)與實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、內(nèi)存管理器實(shí)驗(yàn)?zāi)康脑O(shè)計(jì)和實(shí)現(xiàn)關(guān)于內(nèi)存管理的內(nèi)存布局初始化及內(nèi)存申請(qǐng)分配、內(nèi)存回收等基本功能操作 函數(shù),嘗試對(duì)用256MB的內(nèi)存空間進(jìn)行動(dòng)態(tài)分區(qū)方式模擬管理。內(nèi)存分配的基本單位為1KB, 同時(shí)要求支持至少兩種分配策略,并進(jìn)行測(cè)試和對(duì)不同分配策略的性能展開(kāi)比較評(píng)估。實(shí)驗(yàn)設(shè)計(jì)2.1.實(shí)驗(yàn)要求1 1、設(shè)計(jì)一定的數(shù)據(jù)結(jié)構(gòu)以描述256MB內(nèi)存空間的使用狀況,并設(shè)計(jì)和構(gòu)建 函數(shù) void ChuShuHuaNC (DIZHI zKS_KYNC, DIZHI zJS_KYNC)實(shí)現(xiàn)內(nèi)存布局的初 始化。假定內(nèi)存空間的低址部分56MB (即056M-1)作為系統(tǒng)區(qū)和不參與 分配過(guò)程。-k 2、設(shè)計(jì)和實(shí)現(xiàn)內(nèi)存申請(qǐng)分

2、配函數(shù)DIZHI ShenQingNC(unsigned long zDX),內(nèi)存 分配的基本單位為1KB,同時(shí)要求支持至少兩種分配策略(如首次適應(yīng)、循 環(huán)首次適應(yīng)、最佳適應(yīng)、最壞適應(yīng)等),若分配失敗則返回NULL。3、設(shè)計(jì)和實(shí)現(xiàn)內(nèi)存回收函數(shù)void HuiShouNC(DIZHI zKSDZ),若回收分區(qū)與其 它空閑分區(qū)相鄰接,則采取合并措施。4- 4、基于不同的內(nèi)存分配策略形成不同版本的內(nèi)存管理器,并根據(jù)內(nèi)存平均利 用率(指已分配內(nèi)存占總可分配內(nèi)存的平均比率)和分配查找分區(qū)比較次數(shù) 等指標(biāo)展開(kāi)測(cè)試和對(duì)不同分配策略的內(nèi)存管理器性能進(jìn)行評(píng)估。5、不妨設(shè)計(jì)測(cè)試?yán)炭蚣埽?循環(huán)產(chǎn)生隨機(jī)數(shù),并根據(jù)該

3、值確定是申請(qǐng)內(nèi)存還是回收內(nèi)存;若是申請(qǐng)內(nèi)存,還需進(jìn)一步產(chǎn)生申請(qǐng)內(nèi)存大?。ǚ恼龖B(tài)/均勻分布);若是回收內(nèi)存還需產(chǎn)生隨機(jī)數(shù)和選擇回收區(qū);收集測(cè)試數(shù)據(jù)用于性能評(píng)價(jià);2.2.數(shù)據(jù)結(jié)構(gòu)/*內(nèi)存空閑分區(qū)結(jié)構(gòu)塊*/typedef struct nodeint addr; /空閑分區(qū)的首址int size; /空閑分區(qū)的大小空內(nèi)存塊結(jié)構(gòu)體數(shù)組int status; /空閑分區(qū)的狀態(tài) block空內(nèi)存塊結(jié)構(gòu)體數(shù)組block* arry_empty_block2048;block* arry_apply_block2048;2.3.性能指標(biāo)計(jì)算已申請(qǐng)內(nèi)存塊結(jié)構(gòu)體數(shù)組2.3.性能指標(biāo)計(jì)算已申請(qǐng)內(nèi)存塊結(jié)構(gòu)體數(shù)組指標(biāo)

4、 1: countcount為平均每次申請(qǐng)分配內(nèi)存時(shí)查找符合內(nèi)存大小的次數(shù)。計(jì)算公式:count 指標(biāo) 1: countcount為平均每次申請(qǐng)分配內(nèi)存時(shí)查找符合內(nèi)存大小的次數(shù)。計(jì)算公式:count =query_apply_countapply_countquery_apply_count:總的查詢比較次數(shù)apply_count:總的申請(qǐng)分配內(nèi)存次數(shù)指標(biāo)2: raterate為每1000次對(duì)存儲(chǔ)設(shè)備操作后的平均內(nèi)存利用率。計(jì)算公式:rate =all rateall_countrate =all rateall_countall_rate:總的對(duì)內(nèi)存每次操作后的內(nèi)存利用率之和all_conu

5、t:對(duì)內(nèi)存的操作次數(shù)包括回收和分配程序清單1:變量解釋/個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)*full:空閑分區(qū)的狀態(tài)為滿*empty:空閑分區(qū)的狀態(tài)為空*mix :允許產(chǎn)生的最大申請(qǐng)塊*min:允許申請(qǐng)的最小申請(qǐng)塊*memory_size :初始內(nèi)存大小(256M-56M)*memory_locate :累計(jì)內(nèi)存使用量*query_count_all:累計(jì)比較次數(shù)*memory_empty_count:空閑分區(qū)的內(nèi)存塊數(shù)*memory_apply_count:申請(qǐng)成功的內(nèi)存塊數(shù)2:空間利用率

6、函數(shù)*函數(shù)名:rate*功能:求空間利用率*返回值double*參數(shù):無(wú)*函數(shù)實(shí)現(xiàn)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)double rate()int sizeloction=0;for (int i = 0; i size+ sizeloction;return double(double(sizeloction) / 204800);*3:正態(tài)分布隨機(jī)函數(shù)口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口

7、口口口口口口口口口口口 個(gè)*函數(shù)名稱:radomNumber*功能:產(chǎn)生服從正態(tài)分布的一組隨機(jī)數(shù)*函數(shù)參數(shù):int average (平均數(shù)),int variance (方差)*返回值:int口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口 個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)函數(shù)實(shí)現(xiàn):口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口

8、口口口口口口口口口口口口口口口口口*/根據(jù)均值和方差算正態(tài)分布隨機(jī)數(shù) TOC o 1-5 h z double u=(double)rand()/(RAND_MAX)*2-1;double v=(double)rand()/(RAND_MAX)*2-1;double r=u * u + v * v;if (r =0| r 1) returnradomNumber(average, variance);double c=sqrt(-2 * log(r)/r);double result = (u * v) * variance + average;return (int)result;口口口口口

9、口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口 個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)4:內(nèi)存空間初始化函數(shù)/口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口*函數(shù)名:ChuShiHuaNC*功能:內(nèi)存空間初始化函數(shù),構(gòu)造空閑分區(qū)數(shù)組*參數(shù):無(wú)*返回值:無(wú)口口口口口口口口口口口口口口口口口口口口口口口口口口口口

10、口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口 個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)函數(shù)實(shí)現(xiàn):/口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口*void ChuShiHuaNC()memory locate = 0;/累計(jì)內(nèi)存使用量置0query count all = 0;/累計(jì)比較次數(shù)置0memory_apply_count = 0;/累計(jì)申請(qǐng)分配

11、次數(shù)置0memory empty count = 1;/空閑分區(qū)的內(nèi)存塊數(shù)置0blockblock start-addr = 0;/空閑分區(qū)的首址置block start-addr = 0;/空閑分區(qū)的首址置0block_start-status = full;arry_empty_block0 = block_start;/口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口 /個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)

12、個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)5.首次適應(yīng)算法函數(shù)/個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)*函數(shù)名:FirstFit*功能:首次適應(yīng)算法*參數(shù):int size分配內(nèi)存空間的大小返回值:int申請(qǐng)的內(nèi)存空間的起始地址口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口 個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)

13、個(gè)個(gè)個(gè)函數(shù)流程圖:block_start-size = memory_size;函數(shù)實(shí)現(xiàn):口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口 個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)int FirstFit(int size)intreturnResult;intflag = 0;intreturnResult;intflag = 0;int location_temp;for (int i

14、=0;isize;if (size ceshi)i+;else if(size =arry_empty_blocki-size)location_temp = i;flag =1 ;break;else if(size addr;arry_apply_blockmemory_apply_count = arry_empty_blocklocation_temp;memory_apply_count+;/在空內(nèi)存數(shù)組中去掉該內(nèi)存塊if (location_temp = memory_empty_count - 1)memory_empty_count;elsefor (int j = locat

15、ion_temp; j size = size;block_temp-addr = arry_empty_blocklocation_temp-addr;block_temp-status = empty;returnResult = arry_empty_blocklocation_temp-addr;空內(nèi)存塊的修改,將大的塊改成小的空塊和申請(qǐng)塊arry_empty_blocklocation_temp-size =arry_empty_blocklocation_temp-size - size;/修改sizearry_empty_blocklocation_temp-addr =arry

16、_empty_blocklocation_temp-addr + size;/修改addrarry_empty_blocklocation_temp-status = empty;/S 空內(nèi)存塊狀態(tài)/申請(qǐng)塊加入到申請(qǐng)數(shù)組arry_apply_blockmemory_apply_count = block_temp;memory_apply_count+;else if(flag=0)使用冒泡排序使得按地址增加的順序排列使用冒泡排序使得按地址增加的順序排列/申請(qǐng)空間小于申請(qǐng)塊的大小returnResult = -1;/冒泡排序,按地址排序/排序,從a0開(kāi)始排,從小到大/for (int i =

17、0; i memory_empty_count; i+)for (int j = i + 1; j addr arry_empty_blockj-addr)block * tempi;temp1= arry_empty_blocki;arry_empty_blocki = arry_empty_blockj;arry_empty_blockj = tempi;return returnResult;口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口 個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)

18、個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)6:最佳適應(yīng)算法函數(shù)*功能:最佳適應(yīng)算法*參數(shù):int size分配內(nèi)存空間的大小*返回值:int申請(qǐng)的內(nèi)存空間的起始地址*函數(shù)流程圖:函數(shù)實(shí)現(xiàn) * int BestFit(int size)int returnResult;使用冒泡排序使得按內(nèi)存增加的順序排列int flag = 0;int location_temp;首先對(duì)空內(nèi)存塊的值按塊內(nèi)存大小進(jìn)行排序,有小到大排序冒泡排序for (int i = 0; i memory_empty_count; i+)for (int j = i +

19、1; j addr arry_empty_blockj-addr)block * tempi;temp1= arry_empty_blocki;arry_empty_blocki = arry_empty_blockj;arry_empty_blockj = tempi;for (int i = 0; isize;if (size ceshi)i+;else if (size = arry_empty_blocki-size)location_temp = i;flag = 1;break;else if (size addr;arry_apply_blockmemory_apply_coun

20、t = arry_empty_blocklocation_temp;memory_apply_count+;/在空內(nèi)存數(shù)組中去掉該內(nèi)存塊if (location_temp = memory_empty_count - 1)memory_empty_count-;elsefor (int j = location_temp; j size = size;block_temp-addr = arry_empty_blocklocation_temp-addr;block_temp-status = empty;returnResult = arry_empty_blocklocation_temp

21、-addr;空內(nèi)存塊的修改,將大的塊改成小的空塊和申請(qǐng)塊arry_empty_blocklocation_temp-size =arry_empty_blocklocation_temp-size - size;/修改sizearry_empty_blocklocation_temp-addr =arry_empty_blocklocation_temp-addr + size;/修改addrarry_empty_blocklocation_temp-status = empty;/置空內(nèi)存塊狀態(tài)/申請(qǐng)塊加入到申請(qǐng)數(shù)組arry_apply_blockmemory_apply_count = b

22、lock_temp;memory_apply_count+;else if (flag = 0)/申請(qǐng)空間小于申請(qǐng)塊的大小returnResult = -1;return returnResult;*7:最壞適應(yīng)算法函數(shù)/個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)*功能:最壞適應(yīng)算法*參數(shù):int size分配內(nèi)存空間的大小*返回值:int申請(qǐng)的內(nèi)存空間的起始地址個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)

23、個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)函數(shù)流程圖函數(shù)實(shí)現(xiàn):個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)int WorstFit(int size)int returnResult;int flag = 0;int location_temp;首先對(duì)空內(nèi)存塊的值按塊內(nèi)存大小進(jìn)行排序,有大到小排序使用冒泡排序使得按內(nèi)存減小的順序排列使用冒泡排序使得按內(nèi)存減小的順序排列for (int i = 0; i memory_empty_count; i+)for (int j = i + 1; j addr a

24、rry_empty_blockj-addr)block * tempi;temp1= arry_empty_blocki;arry_empty_blocki = arry_empty_blockj;arry_empty_blockj = tempi;for (int i = 0; isize;if (size ceshi)i+;else if (size = arry_empty_blocki-size)location_temp = i;flag = 1;break;else if (size addr;arry_apply_blockmemory_apply_count = arry_em

25、pty_blocklocation_temp;memory_apply_count+;/在空內(nèi)存數(shù)組中去掉該內(nèi)存塊if (location_temp = memory_empty_count - 1)memory_empty_count;elsefor (int j = location_temp; j size = size;block_temp-addr = arry_empty_blocklocation_temp-addr;block_temp-status = empty;returnResult = arry_empty_blocklocation_temp-addr;空內(nèi)存塊的修

26、改,將大的塊改成小的空塊和申請(qǐng)塊arry_empty_blocklocation_temp-size = arry_empty_blocklocation_temp-size - size;/修改 sizearry_empty_blocklocation_temp-addr = arry_empty_blocklocation_temp-addr + size;/修改 addrarry_empty_blocklocation_temp-status = empty;/置空內(nèi)存塊狀態(tài)arry_apply_blockmemory_apply_count = block_temp; /申請(qǐng)塊加入到申

27、請(qǐng)數(shù)組 memory_apply_count+;else if (flag = 0)/申請(qǐng)空間小于申請(qǐng)塊的大小returnResult = -1;return returnResult;*8:內(nèi)存回收函數(shù)*函數(shù)名:HuiShouNC*功能:內(nèi)存回收函數(shù),用來(lái)回收分配出去的內(nèi)存,* 將其插入空閑分區(qū)數(shù)組中*參數(shù):int type使用的內(nèi)存分區(qū)分配算法的類型*返回值:block* 回收的分區(qū)對(duì)應(yīng)的節(jié)點(diǎn)信息個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)函數(shù)流程圖:函數(shù)實(shí)現(xiàn):個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)

28、個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)block* HuiShouNC()int flag=1;/當(dāng)為情況2和3時(shí)flag為0,當(dāng)為情況1時(shí),flag為1;block * result;/隨機(jī)產(chǎn)生要回收的塊if (memory_apply_count 0)int n = Random(0, memory_apply_count-1);/首先在申請(qǐng)數(shù)組中找到該回收塊result = arry_apply_blockn;if (n = memory_apply_count - 1)memory_apply_

29、count;elsefor (int temp = n; temp addr;int size = arry_apply_blockn-size;for (int i = 0; i addr + arry_empty_blocki-size )=addr)flag = 0;if (i addr)情況3,上下合并arry_empty_blocki-size = arry_empty_blocki-size + size + arry_empty_blocki + 1-size;result = arry_empty_blocki;刪除i+1位置的空閑分區(qū)塊int tempi = i + 1;fo

30、r (; tempi size = arry_empty_blocki-size + size;result = arry_empty_blocki;break;else if (i = memory_empty_count - 1)如果為空分區(qū)的最后一個(gè)(特殊情況)arry_empty_blocki-size = arry_empty_blocki-size + size;result = arry_empty_blocki;break;else if (addr + size = arry_empty_blocki-addr)flag = 0;情況2的下合并 arry_empty_bloc

31、ki-addr = addr;arry_empty_blocki-size = arry_empty_blocki-size + size;result = arry_empty_blocki;break;if (flag = 1)/情況1block* block_temp1 = (block*)malloc(sizeof(block);arry_empty_blockmemory_empty_count = block_temp1;arry_empty_blockmemory_empty_count-addr = addr;arry_empty_blockmemory_empty_count

32、-size = size;arry_empty_blockmemory_empty_count-status = full;memory_empty_count+;result = arry_apply_blockn;return result;elsereturn NULL;個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)9:主函數(shù)/個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)*函數(shù)名:

33、Main*功能:程序的入口和測(cè)試函數(shù) *參數(shù):無(wú)*返回值:無(wú)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)函數(shù)流程圖:函數(shù)實(shí)現(xiàn)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)int main()printf(選擇申請(qǐng)分配內(nèi)存方法n); TOC o 1-5 h z printf(n);printf(| 0 : | t 結(jié)束該程序運(yùn)行t|n);printf(n);printf(| 1 : |

34、 t 首次適應(yīng)算法t|n);printf(n);printf(| 2 : | t 循環(huán)適應(yīng)算法t|n);printf(n);printf(| 3 : | t 最佳適應(yīng)算法t|n);printf(n);printf(| 4 : | t 最壞適應(yīng)算法t|n);printf(n);printf(輸入要選擇的算法代號(hào)n);scanf(d, &style);int rand_size;int rand_style;int circle = 1000;int apply_count=0;/申請(qǐng)內(nèi)存分配次數(shù)double rate1 = 0;/利用率block *p;srand(unsigned)time(N

35、ULL);/生成隨機(jī)數(shù)while (style!=0)ChuShiHuaNC();circle = 1000;rate1 = 0;while (circle 0)rand_style = Random(1, 20);if (rand_style17)rand_size = radomNumber(500,1000);/生成符合正態(tài)分布數(shù)/printf(dn, rand_size);apply_count+;switch (style)case 1:FirstFit(rand_size);/最先適應(yīng)算法break;case 2:BestFit(rand_size);/最佳適應(yīng)算法case 3:W

36、orstFit(rand_size);/ 最壞適應(yīng)算法break;default:break;elsep = HuiShouNC();/ 回收內(nèi)存rate1 = rate1 + rate();/計(jì)算內(nèi)存利用率之和circle;rate1 = rate1 / 1000; /計(jì)算平均內(nèi)存利用率printf(n);printf(查詢總次數(shù)n);printf(dn, query_count_all);printf(申請(qǐng)內(nèi)存分配的次數(shù)n);printf(dn, apply_count);printf(平均每次查詢的次數(shù)為 %lfn, double(double)query_count_all / (do

37、uble)apply_count);printf(平均空間利用率 %lf%n, rate1 * 100);scanf(d, &style);return 0;個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)個(gè)實(shí)驗(yàn)結(jié)果4.1.運(yùn)行結(jié)果首先進(jìn)入運(yùn)行界面選擇申請(qǐng)分配內(nèi)存方法 f 0 : |結(jié)束該程序運(yùn)行P : I首次適應(yīng)算法 P : I循環(huán)適應(yīng)算法I最佳適應(yīng)算法 T: |最壞適應(yīng)算法 輸入要選擇的算法代號(hào)FirstFit運(yùn)行情況如下:查詢總次數(shù)24800申請(qǐng)內(nèi)存分配的次數(shù)791平均每次查詢的次數(shù)為31. 3

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論