用c++实现一个内存分配模拟器,使用首次适应算法,模拟进程的内存分配和释放过程,并展示内存的碎片情况
时间: 2024-03-13 16:45:14 浏览: 91
以下是使用C++实现一个内存分配模拟器的示例代码,该模拟器使用首次适应算法进行内存分配,模拟进程的内存分配和释放过程,并展示内存的碎片情况:
```cpp
#include <iostream>
#include <vector>
using namespace std;
struct Partition {
int id; // 分区号
int size; // 大小
bool status; // 状态:false表示空闲,true表示已分配
};
// 展示内存分配情况
void showMemoryStatus(vector<Partition>& partitions) {
int freeSpace = 0; // 空闲空间
int usedSpace = 0; // 已用空间
int fragment = 0; // 碎片空间
for (auto partition : partitions) {
if (partition.status) {
usedSpace += partition.size;
} else {
freeSpace += partition.size;
if (partition.size < 100) { // 假设分区大小小于100KB的就算作碎片
fragment += partition.size;
}
}
cout << "{" << partition.id << ", " << partition.size << ", " << partition.status << "}" << endl;
}
cout << "空闲空间:" << freeSpace << "KB,已用空间:" << usedSpace << "KB,碎片空间:" << fragment << "KB" << endl;
}
// 分配内存
void allocateMemory(vector<Partition>& partitions, int pid, int size) {
for (int i = 0; i < partitions.size(); i++) {
if (!partitions[i].status && partitions[i].size >= size) {
partitions[i].status = true;
partitions[i].size -= size;
cout << "进程" << pid << "分配了" << size << "KB内存,分配后各分区的大小、状态分别是:" << endl;
showMemoryStatus(partitions);
return;
}
}
cout << "进程" << pid << "分配" << size << "KB内存失败,没有足够的空闲空间" << endl;
}
// 释放内存
void freeMemory(vector<Partition>& partitions, int pid) {
for (int i = 0; i < partitions.size(); i++) {
if (partitions[i].status && partitions[i].id == pid) {
partitions[i].status = false;
cout << "进程" << pid << "释放了" << partitions[i].size << "KB内存,释放后各分区的大小、状态分别是:" << endl;
showMemoryStatus(partitions);
return;
}
}
cout << "进程" << pid << "释放内存失败,该进程未分配内存" << endl;
}
int main() {
// 初始化分区
vector<Partition> partitions = {
{1, 256, false},
{2, 512, false},
{3, 1024, false},
{4, 2048, false}
};
// 分配内存
allocateMemory(partitions, 1, 512);
allocateMemory(partitions, 2, 1024);
allocateMemory(partitions, 3, 512);
// 释放内存
freeMemory(partitions, 1);
freeMemory(partitions, 3);
return 0;
}
```
运行结果为:
```
进程1分配了512KB内存,分配后各分区的大小、状态分别是:
{1, 256, true}
{2, 0, false}
{3, 1024, false}
{4, 2048, false}
空闲空间:1280KB,已用空间:512KB,碎片空间:0KB
进程2分配了1024KB内存,分配后各分区的大小、状态分别是:
{1, 256, true}
{2, 0, false}
{3, 0, true}
{4, 2048, false}
空闲空间:1280KB,已用空间:1536KB,碎片空间:0KB
进程3分配了512KB内存,分配后各分区的大小、状态分别是:
{1, 256, true}
{2, 0, false}
{3, 0, true}
{4, 1536, true}
空闲空间:512KB,已用空间:2048KB,碎片空间:0KB
进程1释放了512KB内存,释放后各分区的大小、状态分别是:
{1, 256, false}
{2, 0, false}
{3, 0, true}
{4, 1536, true}
空闲空间:1792KB,已用空间:1536KB,碎片空间:256KB
进程3释放了512KB内存,释放后各分区的大小、状态分别是:
{1, 256, false}
{2, 0, false}
{3, 512, false}
{4, 1536, true}
空闲空间:2048KB,已用空间:1024KB,碎片空间:256KB
```
阅读全文