我正在进行编程练习,我试图以不同的方式做同样的事情。 (我碰巧在Forth中将两个3元素向量一起添加)。在我的一个修订版中,我使用返回堆栈来存储临时值(所以我正在使用该功能),但除此之外,我正在考虑使用未分配的内存作为临时存储。
我创建了两个单词来访问这个内存:
: front! here + ! ;
: front@ here + @ ;
我在我的实验中尝试过它,它似乎对我正在做的事情起作用。在我的例程完成后,我没有任何意图使用这个记忆。而且我住在字典里,已经有了记忆。
但是,我的直觉仍然告诉我这是一件坏事。这是件坏事吗?
如果重要,我使用Gforth。
答案 0 :(得分:1)
语言律师严格来说,没有。 ANS Forth 3.3.3.2州:
程序可以在连续分配的区域内执行地址算术。
您正在任何已分配的区域之外执行地址算术。
但是,在某些特定实现中可能完全没问题。比如gforth。
请注意,有一个名为PAD
的单词,它将地址返回到临时内存区域。
答案 1 :(得分:1)
如果你知道自己在做什么,那就好了,芽PAD是一个比HERE更好的地方。还有替代ALLOCATE和FREE:
分配(u - a-addr ior)
分配连续数据空间的u地址单元。数据空间 指针不受此操作的影响。最初的内容 分配的空间未定义。
如果分配成功,则a-addr是对齐的起始地址 分配的空间和ior为零。
如果操作失败,则a-addr不代表有效地址 ior是实现定义的I / O结果代码。
免费(a-addr - ior)
将a-addr指示的数据空间的连续区域返回到 系统供以后分配。 a-addr应表示数据区域 先前由ALLOCATE或RESIZE获得的空间。该 数据空间指针不受此操作的影响。
如果操作成功,则ior为零。如果操作失败,那么 实现定义的I / O结果代码。 American National Standard for Information Systems
答案 2 :(得分:0)
:前面!在这里+! ;
堆栈图是什么?我想(n offset_in_cells - )?