0

我正在研究基于存储绑定的绑定过程和变量分类。所以,我面临四种变量:

  1. 静态变量:它们在执行之前(即编译期间)绑定到内存,并在整个执行过程中保持绑定。
  2. 堆栈动态变量:这些变量在编译时静态绑定到类型,但在代码执行到达声明之前它们不会绑定到内存位置。
  3. 显式堆动态变量:这些变量通过显式运行时、程序员指定的指令分配和释放。堆而不是堆栈用于提供所需的存储单元。
  4. 隐式堆动态变量:这些变量的所有属性,包括内存单元,在被赋值时都是绑定的。

我的问题是关于类型 2 和 4。在类型绑定是动态的编程语言中(Php、Ruby、Python,...),所有变量似乎都是类型 4。

这是真的吗?所有变量甚至局部变量都放在堆上?这是实现的事情还是不可能实现具有动态类型绑定的语言,其局部变量放在堆栈中而其他变量放在堆中?

4

1 回答 1

1

不,打字和分配之间没有关联。第一个是语言功能,第二个(通常)是特定实现的细节,可能取决于特定的优化和其他因素。有些变量根本不会被“分配”。在更高级的语言中,假设变量和分配之间存在任何联系甚至是错误的——它们只是在程序文本中命名某些值。

所有这一切的唯一关系类型是它们可以实现更有趣的优化,或者至少使它们更容易。

于 2013-03-01T07:29:56.767 回答