




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、實驗三 內存管理 . 1一實驗目的 . 1二實驗內容 . 1三實驗設計 . 1四模擬實驗 . 2First.cpp . 2First.h . 4Next.cpp . 6Next.h . 8五實驗結果 . 11六實驗總結 . 13實驗三 內存管理一實驗目的構造一個沒有虛存功能的內存管理系統,并進行測試和對不同分配策略的性能展開比較評估。本次實驗,選擇的分配策略:First-fit 和 next-fit二實驗內容1、設計一個內存管理器,支持至少兩種分配策略(本實驗使用firstfit策略和nextfit策略);2、分別對不同的策略進行性能評估三實驗設計unsigned char mm65536;用
2、戶接口函數:int mm_init() /初始化int mm_request(int n) /申請空間void mm_release(int p) /釋放空間3計算請求尺寸srand(unsigned char)time(NULL);tmp = (rand() % 1024) + 1; /最大申請1024tmp = (rand() % j);while(ptmp = -1)requestsize = requestsize - BinToInt(&mmptmp + 4);mm_release(ptmp);tmp = rand() % j; cout << "釋放指
3、針 " << ptmp << endl;ptmp = -1;四模擬實驗#include <iostream>#include <stdio.h>#include <windows.h>#include <time.h>#include "first.h"using namespace std;int main()int i;int j = 0; /分配指針數int p1000; /用于存放分配出的指針int tmp;int requestsize = 0; /統計申請空間int k = 0;
4、/統計搜索步數srand(unsigned char)time(NULL);step = 0;mm_init();for(i = 0; i < 30; i+) /模擬30步 /以下為性能統計指標 cout << endl; cout << "平均申請空間:" << (double)requestsize / (double)j << " 字節" << endl; cout << "平均空間利用率:" << (double)requestsize/
5、(double)65536 << endl; tmp = (rand() % j); while(ptmp = -1) requestsize = requestsize - BinToInt(&mmptmp + 4); mm_release(ptmp); cout << "釋放指針 " << ptmp << endl; ptmp = -1; tmp = rand() % j; while(pj != -1); else cout << "剩余空間不足,分配失敗" << en
6、dl; cout << "分配指針 " << pj << endl; cout << endl; j+; pj = mm_request(tmp); if(pj != -1) requestsize = requestsize+tmp; k = k + step; cout << "申請空間 " << tmp << " 字節" << endl; cout << "第 " << i + 1 <
7、< " 步" << endl; do tmp = (rand() % 1024) + 1; /最大申請1024 cout << "平均搜索步數:" << (double)k/(double)j << endl; cout << endl; if(i + 1) % 5 = 0) system("pause");unsigned char mm65536;int step; /記錄搜索步數int BinToInt(unsigned char *s) /把char類型變成in
8、tint i;char tmp4;int t;for(i = 0; i < 4; i+) tmp3 - i = si; memcpy(&t,tmp,4);return t;void IntToBin(int s, unsigned char *t) /把int類型變成charint i;char tmp4;memcpy(tmp,&s,4);for(i = 0; i < 4; i+)ti = tmp3 - i;int mm_init()memset(mm, 0, 65536);IntToBin(-1, mm); /前向指針 置-1 放在數組的第一個位置IntToBin
9、(65536, &mm4); /整個塊大小,放在第四個位置IntToBin(-1, &mm65536-4); /后向指針 置-1 放在數組的倒數第四個位置 return 0;int mm_request(int n) /四字節前向指針、四字節塊大小、一字節狀態、N字節可用內存、四字節后向指針 int pointer = 0;step = 0;while(mmpointer+8=1)|(n+26)>=BinToInt(&mmpointer+4) /pointer+4 表示塊大小 mmpointer + 8 = 1; /修改本塊標志位IntToBin(pointer
10、+ 4 + 4 + 1 + n + 4, &mmpointer + 9 + n); /修改本塊后向指針IntToBin(pointer, &mmpointer + 4 + 4 + 1 + n + 4); /修改后塊前向指針IntToBin(BinToInt(&mmpointer + 4) - n - 13, &mmpointer + 4 + 4 + 1 + n + 4 + 4); /修改后塊大小IntToBin(n + 13,&mmpointer + 4); /修改本塊大小return pointer;void mm_release(int p)int
11、pre;int bac;pre = BinToInt(&mmp);bac = BinToInt(&mmp + BinToInt(&mmp + 4) - 4);mmp + 8 = 0; /修改本塊標志位if(BinToInt(&mmbac+8) = 0) /如果后塊未使用if(pre = -1) IntToBin(0,&mmp+BinToInt(&mmp + 4) - 4); /清空本塊后向指針 IntToBin(0,&mmbac); /清空后塊前向指針 IntToBin(BinToInt(&mmp + 4) + BinToInt(
12、&mmbac + 4), &mmp + 4); /修改本塊大小 if(BinToInt(&mmbac + BinToInt(&mmbac + 4) - 4) != -1) /如果后塊不是最后一塊 IntToBin(0, &mmbac + 4); /清空后塊大小 IntToBin(p, &mmBinToInt(&mmbac + BinToInt(&mmbac + 4) - 4); /修改后塊的/mmpointer+8=1 狀態位是一,說明這一塊已經被分配 /n+26 申請的空間+管理開銷 pointer=BinToInt(&
13、mmpointer+BinToInt(&mmpointer+4)-4); /找到后向指針 if(mmpointer+8 != 1) step+;/非空閑塊不在鏈內,不計步數 if(pointer = -1) return -1; 后塊前向指針if(BinToInt(&mmpre + 8) = 0) /如果前塊未使用 IntToBin(0, &mmpre + BinToInt(&mmpre + 4) - 4); /清空前塊后向指針 IntToBin(BinToInt(&mmpre + 4) + BinToInt(&mmp + 4), &mm
14、pre + 4); /修改前塊大小 IntToBin(pre, &mmBinToInt(&mmp + BinToInt(&mmp + 4) - 4); /修改后塊前向指針 IntToBin(0, &mmp + 4); /清空本塊大小 IntToBin(0, &mmp); /清空本塊前向指針 return;#include <iostream>#include <stdio.h>#include <windows.h>#include <time.h>#include "next.h"us
15、ing namespace std;int main()int i;int j = 0; /分配指針數int p1000; /用于存放分配出的指針int tmp;int requestsize = 0; /統計申請空間int k = 0; /統計搜索步數srand(unsigned char)time(NULL);step = 0;next = 0;end = -1;mm_init();for(i = 0; i < 30; i+)/模擬30步cout << "這是第 " << i + 1 << " 步" <
16、< endl;do while(pj != -1); tmp = (rand() % j); while(ptmp = -1) requestsize = requestsize - BinToInt(&mmptmp + 4); mm_release(ptmp); cout << "釋放指針:" << ptmp << endl; ptmp = -1; /以下為性能統計指標 cout << endl; cout << "平均申請空間:" << (double)reques
17、tsize/(double)j << " 字節" << endl; cout << "平均空間利用率:" << (double)requestsize/(double)65536 << endl; cout << "平均搜索步數:" << (double)k/(double)j << endl; cout << endl; tmp = rand() % j; tmp = (rand() % 1024) + 1; /最大申請102
18、4 cout << "申請空間 " << tmp << " 字節" << endl; pj = mm_request(tmp); if(pj != -1) else cout << "剩余空間不足,分配失敗。" << endl; requestsize = requestsize + tmp; k = k + step; cout << "分配指針:" << pj << endl; cout <<
19、 endl; j+;if(i + 1) % 5 = 0) system("pause");unsigned char mm65536;int step;int next;int end;int BinToInt(unsigned char *s) int i;char tmp4;int t;for(i = 0; i < 4; i+)memcpy(&t,tmp,4);return t;void IntToBin(int s, unsigned char *t) int i;char tmp4;memcpy(tmp,&s,4);for(i = 0; i &
20、lt; 4; i+) ti = tmp3 - i; tmp3 - i = si;int mm_init()memset(mm, 0, 65536);IntToBin(-1, mm);IntToBin(65536, &mm4);IntToBin(-1, &mm65536-4);return 0;int mm_request(int n)/四字節前向指針、四字節塊大小、一字節狀態、N字節可用內存、四字節后向指針 int pointer;step = 0;pointer = next;while(pointer != -1)if(pointer = -1)while(pointer
21、!= end) if(mmpointer + 8 != 1) && (n + 26) < BinToInt(&mmpointer + 4) pointer = BinToInt(&mmpointer + BinToInt(&mmpointer + 4) - 4); if(mmpointer + 8 != 1) break; pointer = 0; if(mmpointer + 8 != 1) && (n + 26) < BinToInt(&mmpointer + 4) pointer = BinToInt(&
22、mmpointer + BinToInt(&mmpointer + 4) - 4); /step+; if(mmpointer + 8 != 1) step+; break; step+; /step+;if(pointer = end)mmpointer+8 = 1; /修改本塊標志位IntToBin(pointer + 4 + 4 + 1 + n + 4, &mmpointer + 9 + n); /修改本塊后向指針IntToBin(pointer, &mmpointer + 4 + 4 + 1 + n + 4); /修改后塊前向指針IntToBin(BinToIn
23、t(&mmpointer + 4) - n - 13, &mmpointer + 4 + 4 + 1 + n + 4 + 4); /修改后塊大小IntToBin(n + 13, &mmpointer + 4); /修改本塊大小end = pointer;next = pointer + 4 + 4 + 1 + n + 4;return pointer;void mm_release(int p)int pre;int bac;pre = BinToInt(&mmp);bac = BinToInt(&mmp + BinToInt(&mmp + 4)
24、 - 4);mmp + 8 = 0; /修改本塊標志位if(BinToInt(&mmbac + 8) = 0) /如果后塊未使用if(pre = -1)return; if(BinToInt(&mmbac + BinToInt(&mmbac + 4) - 4) != -1) /如果后塊不是最后一塊 IntToBin(0, &mmbac + 4); /清空后塊大小 IntToBin(p, &mmBinToInt(&mmbac + BinToInt(&mmbac + 4) - 4); /修改后塊的IntToBin(0, &mmp + BinToInt(&mmp + 4) - 4); /清空本塊后向指針 IntToBin(0, &mmbac); /清空后塊前向指針 IntToBin(BinToInt(&mmp + 4) + BinToInt(&mmbac + 4), &mmp + 4); /修改本塊大小 return -1; 后塊前向指針if(BinToInt(&mmpre + 8) = 0) /如果前塊未使用 IntToBin(0, &mmpre + BinToInt(&mmpre +
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備設施保養管理制度
- 設立網絡保密管理制度
- 設計單位公司管理制度
- 設計項目售后管理制度
- 診所安全用電管理制度
- 診所藥房倉庫管理制度
- 試驗檢測臺賬管理制度
- 財務資料安全管理制度
- 財政分局合同管理制度
- 貨款回收利息管理制度
- 勞動法課件(完整版)
- GB∕T 37456-2019 海洋平臺電驅動齒輪齒條升降裝置
- 營運車輛智能視頻監控系統管理制度范本及動態監控管理制度
- DB34∕T 3587-2020 城鎮排水管道檢測與修復技術規程
- (完整版)入河排污口設置論證基本要求
- 10kV架空線路施工方案
- 2022年人教版小學數學一年級下冊期中測試卷二(含答案)
- 機器學習簡介PPT通用課件
- 《鐵路建設項目施工圖審核管理辦法》2022年299號-最新
- 電學列方程計算專題復習
- 稅金繳納統計表(模板)
評論
0/150
提交評論