因此,我只是在学习Forth,并好奇是否有人可以帮助我了解内存管理的总体工作原理。目前,我仅对C stack-vs-heap范式有一些了解。

据我了解,人们可以在字典中或堆中进行分配。字典是否像C中的堆栈一样更快/更受欢迎?但是与C语言不同,它没有作用域和自动堆栈回收,因此我想知道是否仅将字典用于全局数据结构(如果有的话)。

就堆而言,它很像C吗?堆管理是一个标准(ANS)概念,还是实现定义的?

最佳答案

它不是字典,也不是堆-相当于堆的是字典。但是,由于存在一个严格的限制,即它的作用类似于堆栈而不是堆-将新​​单词添加到字典的末尾(通过ALLOT分配,并通过FORGET或FREE释放(但释放所有较新的单词-则更像是多个POPs))。

一个实现可以控制内存布局,从而实现传统的堆(或垃圾回收)。一个例子是A FORTH implementation of the Heap Data Structure for Memory Mangement(1984)。另一个实现是Dynamic Memory Heaps for Quartus Forth(2000)。

很多取决于实现或扩展。例如,内存布局通常带有两个块缓冲区(按BLOCKTIB定位),文本输入缓冲区以及该语言的值和低级/原始函数,在最下部是字典中的中间(向上增长),返回堆栈和参数堆栈在顶部1。

字典上方第一个可用字节的地址由HERE返回(随着字典的扩展而变化)。

字典(PAD返回的地址)上方还有一个暂存区,用于临时存储数据。暂存区可以视为空闲内存。

首选的操作模式是尽可能使用堆栈,而不是局部变量或堆。

1页286(关于Forth的特定版本,MMSFORTH)在“ FORTH的记忆,词典和词汇”一章中,Forth:文本和参考。 Mahlon G. Kelly和Nicholas Spies。 ISBN 0-13-326349-5 / 0-13-326331-2(PBK。)。 1986年,普伦蒂斯·霍尔(Prentice-Hall)。

关于memory-management - Forth中的内存管理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9882326/

10-09 17:44