如何释放 MIPS 中的堆内存

How to free the heap memory in MIPS

出于学习目的,我正在尝试在堆内存中实现一个堆栈。

当我推送一些东西时,我只需要执行系统调用 sbrk,这很好。

当我继续 pop 时,我可以检索我的值,但我无法释放分配的 space。有什么办法吗?

sbrk 系统调用不接受负数。我已经试过了。

与 UNIX 中真正的 sbrk 不同,QtSpim/MARS 系统调用 #9 不支持将内存从堆返回给系统。

但是,您可以自己实现 sbrk 功能,因为它相当简单。 (malloc/free 会更复杂,涉及空闲列表等,但这要简单得多。)

当然,你需要一个像真正的 sbrk 一样接受调整数的子程序,并保持少量 persistent/global 状态——也许两个词:UNIX 风格 sbrk 地址和 MARS 风格的系统调用 #9 地址,或者,其中之一和一个免费计数。

释放内存(负 sbrk 参数)仅仅意味着将 UNIX 风格的 sbrk 地址移回 and/or 增加空闲计数,否则什么都不做。

以后的分配(正 sbrk 参数)在分配新堆 space 时考虑标记之间的间隙或空闲计数,并且只有在空闲计数变为 0 时才增加底层 MARS 堆,并且有分配请求中还有更多字节。