C 语言实现分页式存储系统内存管理:含输入输出逻辑及关键注意点
```c #include <stdio.h> #include <stdbool.h> #define BLOCKS 64 // 初始化位示图 void initBitMap(bool bitMap[BLOCKS], int occupiedBlocks[], int size) { for (int i = 0; i < BLOCKS; i++) { bitMap[i] = false; } for (int i = 0; i < size; i++) { bitMap[occupiedBlocks[i]] = true; } } // 查找空闲块 int findFreeBlock(bool bitMap[BLOCKS]) { for (int i = 0; i < BLOCKS; i++) { if (!bitMap[i]) { bitMap[i] = true; return i; } } return -1; } // 分配内存 bool allocateMemory(bool bitMap[BLOCKS], int *allocatedBlocks, int numBlocks) { int count = 0; while (count < numBlocks) { int block = findFreeBlock(bitMap); if (block == -1) { return false; } allocatedBlocks[count++] = block; } return true; } int main() { // 已占用的块 int occupiedBlocks[] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19}; int occupiedSize = sizeof(occupiedBlocks) / sizeof(occupiedBlocks[0]); // 进程申请的内存块数 int requests[4]; for (int i = 0; i < 4; i++) { scanf("%d", &requests[i]); } // 进程编号和页号 int processId, pageId; scanf("%d %d", &processId, &pageId); // 初始化位示图 bool bitMap[BLOCKS]; initBitMap(bitMap, occupiedBlocks, occupiedSize); // 分配内存 int allocatedBlocks[4][54]; bool allocated[4] = {false}; for (int i = 0; i < 4; i++) { if (allocateMemory(bitMap, allocatedBlocks[i], requests[i])) { allocated[i] = true; } } // 检查进程状态 if (!allocated[processId - 1]) { printf("wait\n"); } else if (pageId >= requests[processId - 1] || pageId < 0) { printf("error\n"); } else { printf("%d\n", allocatedBlocks[processId - 1][pageId]); } return 0; } ``` 需要注意的逻辑点: 1. 位示图初始化:确保已占用的块在位示图中正确标记为已占用。 2. 内存分配:在分配内存时,如果找不到足够的空闲块,应立即返回失败状态。 3. 进程状态检查:在输出结果前,务必检查进程是否已成功分配内存以及页号是否有效。 ######[AI写代码神器 | 667点数解答 | 2024-12-02 10:13:36]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)380
- 工程师必备!10 种工程日常易用管理工具大揭秘(百度文心 | 346点数解答 | 2023-11-09 18:26:09)309
- Python实现:读入正整数后从大到小打印,代码详解!(字节豆包 | 165点数解答 | 2025-12-07 09:44:50)90
- Python求解n以内3的倍数:代码实现及开发注意事项 (字节豆包 | 222点数解答 | 2025-12-07 12:28:15)59
- C语言实现:无输入打印精美心形图案代码揭秘(DeepSeek | 72点数解答 | 2025-12-15 17:38:15)50
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)350
- Java实现Student类:含构造、方法及年龄判定(字节豆包 | 464点数解答 | 2024-11-19 15:55:26)402
- Python 实现多功能手机通讯录:添加、查看、删除、修改、查找全搞定!(字节豆包 | 1030点数解答 | 2025-06-05 15:47:56)264
- C++实现九九乘法表输出及代码详细解释(字节豆包 | 412点数解答 | 2026-02-06 22:10:32)85
- C++ 实现根据输入半径计算圆面积并保留三位小数(字节豆包 | 320点数解答 | 2026-04-11 13:10:38)21
- C++ 实现计算班级学生平均分(字节豆包 | 339点数解答 | 2026-04-11 13:11:49)27
- C++ 实现珠心算加法测验:计算集合中满足两数之和条件的数的个数(字节豆包 | 452点数解答 | 2025-11-24 19:17:14)33