具有纯基于堆栈的内存的编程环境? [关闭]

问题描述 投票:0回答:2
许多编程语言和操作系统都有提供[[dynamic存储器的方法:newmalloc

假设:仅使用stacks来限制程序,并且具有预定义的(即编译时)大小,堆栈不能

动态地]增长或收缩。所有数据在这些堆栈的“内部”或“之上”。该程序由栈操作组成:给定数量的寄存器和操作(为方便起见,假设为Intel IA-32)。

使用此假设系统的局限性是什么? (例如,哪些算法问题可以解决,哪些不能解决?)

例如:该程序实际上可以进行网络,I / O,加密或(G)UI吗?

[许多编程语言和操作系统都有提供动态内存的方法:new,malloc等。如果...:程序仅通过使用具有预定义(即编译时)的堆栈进行限制...

language-agnostic stack
2个回答
2
投票

1
投票

对于这些堆栈加上寄存器的位的每种可能配置,自动机都具有单一状态。这可能会使自动机成倍增加,但仍然是有限的。

  1. 如果程序处于第一种状态,则自动机将在两个不同状态之间转换,如果程序将执行一条指令,该指令将以某种方式更改内存,使其看起来像第二种状态下的内存配置。
  2. 因此,您的程序不能比DFA更强大。因此,可以使用常规语言描述通过其状态的转换顺序,因此您的程序无法例如打印出平衡的括号序列或所有质数,等等。

  • 但是,它实质上比DFA

    较弱

    。如果必须将所有内存存储在有限的多个堆栈中,则您不能在输入上运行的程序大于所有堆栈的总和(因为您将没有空间存储输入)。因此,您的程序实际上将是DFA,它开始于与堆栈的初始配置相对应的多种可能状态之一。因此,您的程序只能具有有限的许多可能的行为序列。
  • © www.soinside.com 2019 - 2024. All rights reserved.