Memory management 不使用';分配';?

Memory management 不使用';分配';?,memory-management,forth,Memory Management,Forth,我正在做一个编程练习,我试图用不同的方式做同样的事情。(我碰巧在Forth中将两个3元素向量相加)。在我的一个修订版中,我使用了返回堆栈来存储临时值(因此我正在使用该功能),但除此之外,我还考虑使用未分配的内存作为临时存储 我创建了两个单词来访问此内存: : front! here + ! ; : front@ here + @ ; 我在我的实验中试过了,它似乎对我正在做的事情有效。我没有任何意图在我的例行程序完成后使用这些记忆。我住在字典里,字典里的记忆已经给了程序 但是,我的直觉仍然告诉我

我正在做一个编程练习,我试图用不同的方式做同样的事情。(我碰巧在Forth中将两个3元素向量相加)。在我的一个修订版中,我使用了返回堆栈来存储临时值(因此我正在使用该功能),但除此之外,我还考虑使用未分配的内存作为临时存储

我创建了两个单词来访问此内存:

: front! here + ! ;
: front@ here + @ ;
我在我的实验中试过了,它似乎对我正在做的事情有效。我没有任何意图在我的例行程序完成后使用这些记忆。我住在字典里,字典里的记忆已经给了程序

但是,我的直觉仍然告诉我,这是一件坏事。这是件坏事吗


如果有关系的话,我正在使用。

严格来说,律师的语言是,no.声明:

程序可以在连续分配的区域内执行地址算法

您正在任何分配的区域之外执行地址算术

然而,在某些特定的实现中,它可能是完美的。比如格弗斯

请注意,有一个名为的单词,它将地址返回到临时内存区域

字体前面!这里+


堆栈图是什么?我猜(单元中的n偏移量-)?

如果你知道你在做什么,没关系,bud PAD是一个比这里更好的地方。还有另一种分配和免费:

分配(u--a地址ior)

分配连续数据空间的u地址单元。数据空间 指针不受此操作的影响。报告的初始内容 分配的空间未定义

如果分配成功,a-addr是的对齐起始地址 分配的空间和ior为零

如果操作失败,a-addr不表示有效地址,并且 ior是实现定义的I/O结果代码

免费(a-addr--ior)

将a-addr指示的数据空间的连续区域返回到 供以后分配的系统。a-addr应表示数据区域 以前通过分配或调整大小获得的空间。这个 数据空间指针不受此操作的影响

如果操作成功,ior为零。如果操作失败,ior为 实现定义的I/O结果代码


Wil Baden对这个方案做了一些修改,以定义局部变量。它只需要一个值和一个偏移量。