根据1998年的原始规范,Ben Olmstead Malbolge VM使用对前两个单元的crazy op填充空内存单元。未初始化的单元格通过对前两个单元格重复执行op来设置。例如
[m] = crz [m-2], [m-1]
为了理智起见,如果程序只包含一条指令,我该怎么办?
还是我应该假设最后一个字符总是EOF
?
从执行和语言律师的角度来看,有两种选择
-
如果我们将"两个前一个单元格"的定义视为字面上的两个前一个单元格,那么单字符或空malbolge程序在语言中是非法的,因为它不能按照规范执行。
-
如果我们考虑
[m] = crz [m-2], [m-1]
的定义,它就变得有趣了。主要实现(以及大多数其他实现)使用unsigned short
(或int
)作为内存指针。当您尝试从1
(m-2
)中减去2
时,结果是0xffff
,十进制65535
(详细信息请参阅此答案),这只是稍微超过malbolge的59049
内存限制。该故障在正常机器上运行(几乎)完美,使用0xffff
单元进行疯狂操作计算(甚至不损害环境外内存!),但在有限内存或虚拟机上将失败。- 你可能最终与
0xffffffff
而不是0xffff
,这取决于你使用指针的方式。
- 你可能最终与
简而言之,
- 如果您手动运行,假定它失败。
- 如果你在虚拟机上运行它,它失败
- 如果您在模拟器上运行它,它将可能工作,但将失败运行本身,因为
0xffff
是一个随机值的内存单元,导致随机值沿着环境内存。另一方面,您能从单字节malbolge程序中得到什么?