3

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

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

: front! here + ! ;
: front@ here + @ ;

我在实验中尝试过,它似乎对我正在做的事情有效。在我的例程完成后,我没有任何打算使用这个内存。而且我生活在字典中,其中的记忆已经被赋予了程序。

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

如果重要的话,我正在使用Gforth

4

3 回答 3

2

语言律师严格来说,没有。 ANS Forth 3.3.3.2指出:

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

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

但是,在某些特定的实现中可能完全没问题。比如gforth。

请注意,有一个词叫做PAD,它返回一个临时内存区域的地址。

于 2014-12-03T18:51:33.090 回答
1

如果您知道自己在做什么,那没关系,bud PAD 是比 HERE 更好的地方。还有另一种 ALLOCATE 和 FREE:

ALLOCATE ( u -- a-addr ior )

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

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

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

免费(a-addr -- ior)

将 a-addr 指示的数据空间的连续区域返回给系统以供以后分配。a-addr 应指示先前由 ALLOCATE 或 RESIZE 获得的数据空间区域。数据空间指针不受此操作的影响。

如果操作成功,则 ior 为零。如果操作失败,则 ior 是实现定义的 I/O 结果代码。美国信息系统国家标准

于 2015-01-25T16:16:15.700 回答
0

: 正面!这里+!;

什么是栈图?我猜(n offset_in_cells -- )?

于 2014-12-06T21:08:11.950 回答