【编程题目 |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

注意:

  1. 内存池总大小为100字节。
  2. 内存池地址分配必须是连续内存,并优先从低地址分配。
  3. 内存释放后可被再次分配,已释放的内存在空闲时不能被二次释放。
  4. 不会释放已申请的内存块的中间地址。
  5. 释放操作只是针对首地址所对应的单个内存块进行操作,不会影响其它内存块。

解答要求

  • 时间限制: 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%内容,购买单篇文章或订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

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%内容,购买单篇文章或订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python


from sys import stdin

class MiniMemoryPool:
    def __init__(self):
        self.memory = []

剩余50%内容,购买单篇文章或订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看