2014-06-14 165 views
5

我正在学习操作系统和我不明白的东西是堆栈和堆栈。我知道每种方法的优点和优点,但在动态语言的情况下,我无法弄清楚堆栈是如何分配的。在PHP中堆栈和堆?

在静态类型化语言中,所有原始数据类型都存储在堆栈中,因为它们很小,并且会按照它们分配的顺序或多或少地重新分配,但是像PHP这样的语言在运行时才会知道。那么堆栈大小和变量分配可能如何?

如果我理解正确,堆栈大小是通过分析原始数据类型的数量和一些偏移量在编译时确定的。该过程如何在PHP或其他动态语言中完成?

如果这个问题是踢在黑暗中,请给我一些导游如何了解这个

+1

我将标记动态编程固定为动态语言 – Jack

回答

2
  1. 如果我理解它正确,所有的PHP数据类型是zvalzval基于几个“Z”数据类型(在C中定义)。有“真实”数据类型的限制数量。我相信他们存储在堆栈中。

    因此虽然用户可以创建新的数据类型,但它们不是“真实”的数据类型,而是不同的zval值。 “真实”数据类型的数量和定义是稳定的。因此堆栈的大小和内容在运行时不会改变。

  2. 内存大小有限。 PHP必须积极做reference counting和垃圾收集。欲了解更多详情,请阅读this slide about PHP memory management

1

dynamic programming language的情况下,该解释器负责处理该问题。解释行为大致就像一台电脑。我们假设在32位机器上运行一个类C的解释性编程语言:

c = 10;

基本上会发生以下情况的每一个表达式,在最小的解释:

  • 译隐式推断c变量类型为整数;
  • c标识符被置于表达的symbol table
  • 右侧进行评价,并将结果关联到c标识符。

当你写这样的表达式:

a = c * 2 

一个符号表查找被执行,寻找c标识符,如果找到,从符号表中保持基准例如此条,其中我们的10值存储在内存中。这个10值被加载,然后在表达式中被“替换”。

+0

未分配值的值如何? – gorgi93

+1

他们仍然活在记忆中。 –

+0

作为什么类型或类型的变量? – gorgi93