new
,malloc
等假设:仅使用stacks来限制程序,并且具有预定义的(即编译时)大小,堆栈不能
动态地]增长或收缩。所有数据在这些堆栈的“内部”或“之上”。该程序由栈操作组成:给定数量的寄存器和操作(为方便起见,假设为Intel IA-32)。
使用此假设系统的局限性是什么? (例如,哪些算法问题可以解决,哪些不能解决?)例如:该程序实际上可以进行网络,I / O,加密或(G)UI吗?
[许多编程语言和操作系统都有提供动态内存的方法:new,malloc等。如果...:程序仅通过使用具有预定义(即编译时)的堆栈进行限制...
对于这些堆栈加上寄存器的位的每种可能配置,自动机都具有单一状态。这可能会使自动机成倍增加,但仍然是有限的。
因此,您的程序不能比DFA更强大。因此,可以使用常规语言描述通过其状态的转换顺序,因此您的程序无法例如打印出平衡的括号序列或所有质数,等等。
较弱
。如果必须将所有内存存储在有限的多个堆栈中,则您不能在输入上运行的程序大于所有堆栈的总和(因为您将没有空间存储输入)。因此,您的程序实际上将是DFA,它开始于与堆栈的初始配置相对应的多种可能状态之一。因此,您的程序只能具有有限的许多可能的行为序列。