OD-内存池分配(python)

该文描述了一个简易内存池的管理策略,其中内存按大小粒度分类。内存分配遵循大于等于申请量、优先分配粒度小的内存且不拆分的原则。给定内存资源和申请列表,程序会模拟分配过程并返回结果。示例展示了如何处理不同大小的内存申请及分配情况。
摘要由CSDN通过智能技术生成

内存池

题目描述

有一个简易内存池,内存按照大小粒度分类,每个粒度有若干个可用内存资源。
用户会进行一系列内存申请,需要按需分配内存池中的资源,返回申请结果成功失败列表。
分配规则如下:

  1. 分配的内存要大于等于内存的申请量
    存在满足需求的内存就必须分配
    优先分配粒度小的,但内存不能拆分使用
  2. 需要按申请顺序分配
    先申请的先分配,有可用内存分配则申请结果为true
    没有可用则返回false
  • 注释:不考虑内存释放

输入描述

输入为两行字符串:
第一行为内存池资源列表,
包含内存粒度数据信息,粒度数据间用逗号分割,
一个粒度信息内用冒号分割,冒号前为内存粒度大小,冒号后为数量,
资源列表不大于1024
每个粒度的数量不大于4096
第二行为申请列表,
申请的内存大小间用逗号分割,申请列表不大于100000

64:2,128:1,32:4,1:128
50,36,64,128,127

输出描述

输出为内存池分配结果
true,true,true,false,false

示例一

输入

64:2,128:1,32:4,1:128
50,36,64,128,127

输出

true,true,true,false,false

说明

内存池资源包含:64k2个、128k1个、32k4个、1k128个的内存资源
针对50,36,64,128,127的内存申请序列,
分配的内存依次是,64,64,128,null,null
第三次申请内存时已经将128分配出去,因此输出的结果是
true,true,true,false,false

 

# !E:\pythonScript\venv python3
# -*- coding: utf-8 -*-
"""
Date: 2023/3/27
Time: 22:49
Author: kang
"""


def memory_allocation(resources, apply):
    memory_pool = {}
    for i in resources.split(","):
        size, num = map(int, i.split(":"))
        memory_pool[size] = num
    memory_pool = dict(sorted(memory_pool.items(), key=lambda x: x[0]))
    print(memory_pool)
    use_memory = list(map(int, apply.split(",")))
    print(use_memory)
    result = []
    for j in use_memory:
        sign = 'false'
        for k in memory_pool.keys():
            if j < k:
                if memory_pool[k] > 0:
                    memory_pool[k] = memory_pool[k] - 1
                    sign = 'true'
                    break
        result.append(sign)
    print(" ".join(result))


if __name__ == "__main__":
    resources = input().strip()
    apply = input().strip()
    memory_allocation(resources, apply)

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值