我正在做这个简单的“游戏引擎”,用于创建cli像素游戏,https://github.com/pandasoli/a68g-game-engine。
我在lib/canvas.a68文件中看到了这一点。这两个循环产生了一个错误:
7 arr := new
1
a68g: lib/operators.a68: runtime error: 1: insufficient memory, in VOID closed-clause starting at "(" in line 3.我尝试删除其中一个循环,程序正常运行,而不管我删除的是哪个循环。
(帮助:)
发布于 2022-09-19 17:37:16
我创建了一个包含FOR i TO 50000 DO putf(stand out, ($g" *"l$, i) OD的文件,其结果是大量的*,然后
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精灵还没有“使用”.
发布于 2022-09-21 16:39:57
在Marcel van der Veer的词句中
别担心,这不是a68g中的一个bug,而是Algol 68实现的一个特点。Algol 68允许您在堆上分配空间,但是您不可能像在C中那样积极地释放分配的空间。而且,a68g m在堆中保持匿名的中间结果。最终,堆空间耗尽了,垃圾收集器必须释放不再引用的空间,最好压缩堆。没有垃圾回收策略能够解决所有内存管理问题。Algol 68 Genie有一个垃圾收集器,但是由于垃圾收集成本很高,a68g使用它作为权衡,以优化性能。多年来,这一策略是根据用户反馈进行调整的。不利的一面是,一些程序可能会意外地结束,因为堆填满了,而从程序员的角度来看,没有明确的原因导致这种情况发生。为了缓解这个问题,a68g提供了两个过程“清除堆”和“抢占式扫描堆”,如果需要的话,您可以在代码中的战略位置调用它们。
https://stackoverflow.com/questions/73751326
复制相似问题