没有'分配'是否可以使用字典存储器?

时间:2014-12-03 17:13:55

标签: memory-management forth

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

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

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

我在我的实验中尝试过它,它似乎对我正在做的事情起作用。在我的例程完成后,我没有任何意图使用这个记忆。而且我住在字典里,已经有了记忆。

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

如果重要,我使用Gforth

3 个答案:

答案 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 - )?