Memory management 取消分配以前分配给变量的内存(使用create)

Memory management 取消分配以前分配给变量的内存(使用create),memory-management,forth,gforth,Memory Management,Forth,Gforth,我正在阅读关于内存分配/释放的手册,这是我无法理解的。假设我分配了一块内存来保存四个整数,如下所示: create foo 1 , 2 , 3 , 4 , 然后,可能我分配了更多内存,也可能释放了一些,现在我想释放foo。我该怎么做?执行foo free和foo 4个单元格free会导致错误。一个选项是使用忘记foo,但这将“取消分配”自定义foo以来定义的所有内容,更糟糕的是Gforth没有实现它。在Gforth中,您必须使用“标记”,但这也会还原标记之后发生的所有事情 例如(我将向您展示将

我正在阅读关于内存分配/释放的手册,这是我无法理解的。假设我分配了一块内存来保存四个整数,如下所示:

create foo 1 , 2 , 3 , 4 ,

然后,可能我分配了更多内存,也可能释放了一些,现在我想释放
foo
。我该怎么做?执行
foo free
foo 4个单元格free
会导致错误。

一个选项是使用
忘记foo
,但这将“取消分配”自定义
foo
以来定义的所有内容,更糟糕的是Gforth没有实现它。在Gforth中,您必须使用“标记”,但这也会还原标记之后发生的所有事情

例如(我将向您展示将此输入到Gforth解释器中会得到什么,包括解释器的响应(用双星号表示)):

marker-unfoo**ok**
创建foo 1,2,3,4,**确定**
/返回foo(1)中第一个内容的测试词
:test foo@**嗯**
测试**1正常**
-unfoo**ok**
福
**:8:未定义的单词

>>>我的天啊。。。这是否意味着我必须编写自己的分配器?也许我问的问题不对。我想要的只是像
alloc
/
free
pair这样的东西。我还觉得这就是GForth分配/释放内存的方式。
create
在某种程度上类似于静态分配吗?也就是说,您通常会在程序中分配/取消分配这些实体,还是这是一种不寻常的做法?从技术上讲,我想要的只是有一个地方,在那里保存一个大小可变的字符串(该字符串在堆上分配)。@wvxvw我在我的答案末尾添加了一些东西,希望能回应您的评论。谢谢!我需要详细讨论一下这个例子,但我认为它正引导我朝着正确的方向前进。也谢谢你的详细解释!哈哈,@PeterMortensen,我打赌有115人订阅了
forth
标签,没有一个人找不到Gforth手册。。。用“四”代替“四”,来吧。。。绝对没有必要在你的编辑,请停止以下我的帖子!这种跟踪狂的行为很奇怪,完全没有必要。@user797257,也许彼得想到了第116个人?无论如何,我真的很感激他的编辑。
marker -unfoo **ok**

create foo 1 , 2 , 3 , 4 , **ok**

/ A test word to get the first thing in foo (1) back
: test foo @ . ; **ok**

test **1 ok** 

-unfoo **ok**

foo

**:8: Undefined word
>>>foo<<<
Backtrace:
$7FAA4EB4 throw
$7FAB1628 no.extensions
$7FAA502C interpreter-notfound1**

test

**:8: Undefined word
>>>test<<<
Backtrace:
$7FAA4EB4 throw
$7FAB1628 no.extensions
$7FAA502C interpreter-notfound1**