Python简易内存池

liftword4个月前 (03-20)技术文章44
class MemoryPool:
    def __init__(self, total_size=100):
        self.total_size = total_size
        self.memory = [None] * total_size  # 用列表模拟内存池
        self.allocated = {}  # 记录已分配的内存块 {起始地址: 大小}

    def request(self, size):
        if size <= 0 or size> self.total_size:
            return "error"
        
        # 寻找连续空闲内存
        start = 0
        while start < self.total_size:
            if self.memory[start] is None:
                end = start
                while end < self.total_size and self.memory[end] is None:
                    if end - start + 1 == size:
                        # 分配内存
                        for i in range(start, end + 1):
                            self.memory[i] = "allocated"
                        self.allocated[start] = size
                        return start
                    end += 1
                start = end + 1
            else:
                start += 1
        return "error"

    def release(self, address):
        if address not in self.allocated:
            return "error"
        
        # 释放内存
        size = self.allocated[address]
        for i in range(address, address + size):
            self.memory[i] = None
        del self.allocated[address]
        return None

# 处理输入
def process_commands(commands):
    memory_pool = MemoryPool()
    for cmd in commands:
        if cmd.startswith("REQUEST="):
            size = int(cmd.split("=")[1])
            result = memory_pool.request(size)
            if result is not None:
                print(result)
        elif cmd.startswith("RELEASE="):
            address = int(cmd.split("=")[1])
            result = memory_pool.release(address)
            if result == "error":
                print("error")
        else:
            print("error")

# 输入处理
N = int(input("请输入操作命令的个数: "))
commands = [input(f"请输入第 {i + 1} 个操作命令: ") for i in range(N)]

# 执行命令
process_commands(commands)


相关文章

分享一个文件整理使用Python小脚本(删除相同文件减小内存占用)

写在前面:脚本作用:在目标文件夹中筛选出大小相同的文件,并打印在屏幕上,这样可以快速找出相同文件,释放硬盘内存。前期部署:安装python并做好配置环境变量(基础)先上代码:import osfrom...

喂!你这个python的内存是不是爆了?喏,拿这个去测试一下看看

你是否曾经为python程序的内存占用问题头疼不已?是否觉得内存泄漏、对象占用过多内存等问题难以排查?别急,今天我要介绍一个神器——pympler,让你轻松搞定python内存分析!01什么是pymp...

面试必备:Python内存管理机制(建议收藏)

什么是内存管理器(what)Python作为一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存管...

面试必备 | Python 垃圾回收机制

众所周知,Python 是一门面向对象语言,在 Python 的世界一切皆对象。所以一切变量的本质都是对象的一个指针而已。Python 运行过程中会不停的创建各种变量,而这些变量是需要存储在内存中的,...

Python性能优化: 探索提高Python代码性能的技术

Python是一门强大而灵活的编程语言,但在处理大规模数据和性能要求严苛的场景下,性能优化显得尤为重要。本教程将带你探索提高Python代码性能的技术,包括使用生成器、列表推导式等减少内存占用,以及通...

10个Python进阶问题

1 .解释Python支持的文件处理模式。Python中有三种文件处理模式:只读(r)、只写(w)、读写(rw)和追加(a)。因此,如果您以读取模式打开文本文件。前面的模式变为“rt”表示只读,“wt...