memory - 在 Forth 中使用 HERE 作为临时空间
问题描述
我正在用 Forth 编写游戏(用于学习目的)。
游戏在“10 格板”上进行。我正在尝试新的东西所以我做到了
here 10 [char] - fill
为电路板设置空间。
然后,在位置 3 打“X”
[char] X here 3 + c!
这一直工作正常,但提出了一个问题
这个可以吗?
如果电路板有一百万个单元格宽怎么办?
谢谢
解决方案
所描述的方法具有一定的环境依赖性,因此您的程序只需匹配您的 Forth 系统(即您使用的)程序的环境限制。
1.数据空间的大小
该词UNUSED
返回“由”寻址的区域中剩余的空间量HERE
。因此,程序可以检查可用空间。
此外,根据Forth 标准的4.1.3 其他系统文档小节:
系统应提供以下信息: [...] 可用的程序数据空间,以地址为单位;
因此,您只需检查您的 Forth 系统是否为您的程序提供了足够的数据空间,以及如何配置可用的数据空间(如果有的话)。
2. 瞬态区域
在一般情况下,可移植程序在不保留数据空间的情况下使用数据空间是不安全的。
根据 Forth 标准的3.3.3.6 其他暂态区域PAD
部分,由、WORD
和标识的数据空间区域的内容在#>
分配数据空间后可能会失效。随之,由、、 和HERE
标识的区域内容改变后, 标识的区域内容可能会失效。PAD
WORD
#>
在许多现有的 Forth 系统中,这些区域位于
HERE
或刚好超出它,因此存在许多限制。
HERE
此外,某些 Forth 系统在翻译过程中可能会出于内部目的使用由 标识的区域。例如,Gforth 0.7.9 在解码转义字符串时使用该区域。词组:
s\" test\-passed" cr here over type cr type cr
输出:
test-passed
test-passed
因此,您必须检查您的 Forth 系统的限制,您是否可以在HERE
不保留空间的情况下使用 标识的区域(以及在什么条件下)。
推荐阅读
- javascript - 解析 html 标签以在 javascript 中显示为真正的 html 组件
- php - 使用 PHP 从 FTP 上的 ZIP 文件中读取文件,无需下载整个存档
- ruby - Discord Ruby 机器人不响应用户加入
- ios - 找不到 -lFirebaseDynamicLinks 的库
- javascript - 打字稿错误:类型 [SOME_OBJECT] 中缺少索引签名
- google-chrome - WebPush by Firebase 云消息使用 admin SDK,本站已在后台更新
- python - 预测性维护中的 MDP
- python - 将行添加到数据框中,这些行是数据框的乘积,python
- sql - 获取最新的时间戳值
- java - 在 Kotest 单元测试运行时抛出 NoClassDefFoundError