[英]How to free the heap memory in MIPS
为了学习pourposes,我正在尝试在堆memory 中实现一个堆栈,当我推送一些东西时,我只需要执行系统调用sbrk,这很好。 但是当我继续进行弹出时,我可以检索我的值,但我无法释放分配的空间,有什么办法可以做到这一点?
sbrk 系统调用不接受负数,我已经尝试过了。
提前致谢
与 UNIX 中真正的sbrk
不同,QtSpim/MARS 系统调用 #9 不支持将 memory 从堆返回到系统。
但是,您可以自己实现sbrk
功能,因为它相当简单。 ( malloc
/ free
会更复杂,涉及自由列表等,但这要简单得多。)
当然,您需要一个像真正的sbrk
一样获取调整号的子例程,以及少量 state — 可能是两个词:UNIX 样式的sbrk
地址和 MARS 样式的系统调用 #9 地址,或者其中一个或另一个和一个免费的计数。
释放 memory(负sbrk
参数)仅意味着将 UNIX 样式的sbrk
地址移回和/或增加空闲计数,否则什么也不做。
稍后的分配(正sbrk
参数)在分配新堆空间时考虑间隙或空闲计数,并且仅在空闲计数变为 0 并且分配请求中还有更多字节时才增加底层 MARS 堆。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.