- 页面置换算法 C++
- 1.代码
- 2.案例
#include2.案例#include #include //提供了大量基于迭代器的非成员模版函数 #include //队列 using namespace std; const int MAX_SIZE = 1e3+5;//1e3+5=1005 const int INF = 0x3f3f3f3f;//32-bit int的最大值 int pg_last[MAX_SIZE]; //上次使用页面的时间 bool vis[MAX_SIZE]; //标记队列 class Node { public: int node[MAX_SIZE]; int iSize; int cur; bool isFull(); bool exist(int x); Node() { cur = 0; } Node(int sz) { iSize = sz; cur = 0; } }; // struct Pair 辅助OPT struct Pair { int pos; int id; bool operator<(const Pair x)const { return id > x.id; } } op[MAX_SIZE]; bool Node::isFull() { return cur == iSize; } void createPages(int n,Node &pg) { cout<<"请输入长度为"< >pg.node[i]; } } void printResult(int n,int fail_cnt,int replace_cnt) { double fail_rate = fail_cnt / double(n) * 100; cout<<" 置换次数: "< q; memset(vis,false,sizeof(vis));//memset()对一片内存空间逐字节进行初始化 for(int i = 0; i < pg.iSize; ++i) { if(vis[pg.node[i]]) continue; if(int(q.size()) < m) { q.push(pg.node[i]); vis[pg.node[i]] = true; fail_cnt++; } else { int aim = q.front();//返回当前vector容器中起始元素的引用 q.pop();//删除栈顶元素 vis[aim] = false; q.push(pg.node[i]); vis[pg.node[i]] = true; fail_cnt++; replace_cnt++; } } cout<<"-------------FIFO Result--------------"< >m>>n; Node pg; createPages(n,pg); cout<<"-------------选择页面置换算法---------------"< >op) { switch(op) { case 1: FIFO(m,pg); break; case 2: OPT(m,pg); break; case 3: LRU(m,pg); break; case 0: exit(0); } } return 0; }
3 20
7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)