首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ALGOL 68 Genie -内存不足

ALGOL 68 Genie -内存不足
EN

Stack Overflow用户
提问于 2022-09-17 00:15:29
回答 2查看 68关注 0票数 1

我正在做这个简单的“游戏引擎”,用于创建cli像素游戏,https://github.com/pandasoli/a68g-game-engine

我在lib/canvas.a68文件中看到了这一点。这两个循环产生了一个错误:

代码语言:javascript
复制
7       arr := new
        1
a68g: lib/operators.a68: runtime error: 1: insufficient memory, in VOID closed-clause starting at "(" in line 3.

我尝试删除其中一个循环,程序正常运行,而不管我删除的是哪个循环。

(帮助:)

EN

回答 2

Stack Overflow用户

发布于 2022-09-19 17:37:16

我创建了一个包含FOR i TO 50000 DO putf(stand out, ($g" *"l$, i) OD的文件,其结果是大量的*,然后

代码语言:javascript
复制
4         putf(stand out, ($g" *"l$, i))
                          1             
a68g: runtime error: 1: insufficient memory, in VOID loop-clause starting at "FOR" in line 1.

再来一次。嗯,看起来阿尔戈尔68精灵还没有“使用”.

票数 1
EN

Stack Overflow用户

发布于 2022-09-21 16:39:57

在Marcel van der Veer的词句

别担心,这不是a68g中的一个bug,而是Algol 68实现的一个特点。Algol 68允许您在堆上分配空间,但是您不可能像在C中那样积极地释放分配的空间。而且,a68g m在堆中保持匿名的中间结果。最终,堆空间耗尽了,垃圾收集器必须释放不再引用的空间,最好压缩堆。没有垃圾回收策略能够解决所有内存管理问题。Algol 68 Genie有一个垃圾收集器,但是由于垃圾收集成本很高,a68g使用它作为权衡,以优化性能。多年来,这一策略是根据用户反馈进行调整的。不利的一面是,一些程序可能会意外地结束,因为堆填满了,而从程序员的角度来看,没有明确的原因导致这种情况发生。为了缓解这个问题,a68g提供了两个过程“清除堆”和“抢占式扫描堆”,如果需要的话,您可以在代码中的战略位置调用它们。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73751326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档