【编程题目 |200分】 简易内存池【2021 H2, 2022 Q1,Q2 考试题 2023 Q2考试题 B卷】
时间限制:C/C++ 1秒,其他语言 2秒
空间限制:C/C++262144K,其他语言524288K
64bit IO Format:%lld
本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,
编码后请点击”保存并调试“按钮进行代码提交。
■ 题目描述
- 请实现一个简易内存池,根据请求命令完成内存分配和释放。
- 内存池支持两种操作命令,REQUEST和RELEASE,其格式为:
- REQUEST=请求的内存大小 表示请求分配指定大小内存,如果分配成功,返回分配到的内存首地址;如果内存不足,或指定的大小为0,则输出error。
- RELEASE=释放的内存首地址 表示释放掉之前分配的内存,释放成功无需输出,如果释放不存在的首地址则输出error。
注意:
- 内存池总大小为100字节。
- 内存池地址分配必须是连续内存,并优先从低地址分配。
- 内存释放后可被再次分配,已释放的内存在空闲时不能被二次释放。
- 不会释放已申请的内存块的中间地址。
- 释放操作只是针对首地址所对应的单个内存块进行操作,不会影响其它内存块。
解答要求
- 时间限制: 1000ms, 内存限制: 256MB
首行为整数 N , 表示操作命令的个数,取值范围:0 < N <= 100。
接下来的N行, 每行将给出一个操作命令,操作命令和参数之间用 “=”分割。
样例1:
输入
2
REQUEST=10
REQUEST=20
输出
0
10
样例2:
5
REQUEST=10
REQUEST=20
RELEASE=0
REQUEST=20
REQUEST=10
输出样例2:
0
10
30
0
提示说明:
第一条指令,申请地址0~9的10个字节内存,返回首地址0
第二条指令,申请地址10~29的20字节内存,返回首地址10
第三条指令,释放首地址为0的内存申请,0~9地址内存被释放,变为空闲,释放成功,无需输出
第四条指令,申请20字节内存,09地址内存连续空间不足20字节,往后查找到3049地址,返回首地址30
第五条指令,申请10字节,0~9地址内存空间足够,返回首地址0
C++
#include <bits/stdc++.h> using namespace std; class MiniMemoryPool { public: MiniMemoryPool() { mStatus = vector<bool>(numHundred, false); } int Request(int size) { int ans = -1;
剩余50%内容,购买单篇文章或订阅会员后查看
隐藏内容
此处内容需要权限查看
会员免费查看JAVA
import java.util.*; class no17 { static class AllocatedMemory { private TreeMap<Integer, Integer> hasAllocated; private int ADDRESS_DEFAULT_HEAD = 0; private int ADDRESS_DEFAULT_END = 100; AllocatedMemory() { hasAllocated = new TreeMap<>(); }
剩余50%内容,购买单篇文章或订阅会员后查看
隐藏内容
此处内容需要权限查看
会员免费查看Python
from sys import stdin class MiniMemoryPool: def __init__(self): self.memory = []
剩余50%内容,购买单篇文章或订阅会员后查看
隐藏内容
此处内容需要权限查看
会员免费查看声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。