gpt4 book ai didi

memory-management - 实现内存管理的不同方式

转载 作者:行者123 更新时间:2023-12-03 23:40:56 25 4
gpt4 key购买 nike

故事如下,我正在从头开始构建基于 Z80 的计算机,我的意思是,将 Z80、外围设备、RAM 和 ROM 焊接在一起。但是一旦完成,我将得到超过 64K 的 RAM(我正在使用内存库来获取比 Z80 能够寻址的内存更多的内存),我不知道如何管理。我的想法是在计算机上编写一个简单的 lisp 解释器,但我也想要动态数组或字符串,我显然需要 malloc 之类的东西。

那么问题来了,一旦你有了一 block 连续的内存,你如何对它进行分片和管理呢?

你能告诉我一些完成此操作的方法/算法吗?我想保持简单,但也不要偷懒并正确地做。

最佳答案

您至少需要一些在经典 Z80 术语中称为“公共(public)”空间的空间。您不能一次切换所有内存,否则您会丢失指令和堆栈。

例如,如果您有 32K 固定,32K 存储(这是迄今为止最容易电汇的),那么您将为您的数据分配一堆银行。然后,您需要每个银行的标准分配器(第一个/最后一个适合),并简单地遍历银行以找到有空间的分配器。换句话说,这个问题不是“banked malloc”问题,而是普通 malloc 问题的 for 循环,并且有大量针对小型机器的复杂 malloc 实现。

对于 free/realloc 你还需要记住银行号码。 Realloc 稍微有点棘手,因为数据可能会移动银行。

数据的困难情况是,如果您想尝试将一些东西放在一起(例如,这样您就可以比较两个字符串而无需复制或连续的银行切换)

不过,如果我正在构建 lisp 机器,我想我会从 68000 开始 8)

有点像 tiny68K https://retrobrewcomputers.org/doku.php?id=boards:sbc:tiny68k

关于memory-management - 实现内存管理的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49490868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com