2013-02-28 37 views
0

我正在研究綁定過程和基於存儲綁定的變量分類。所以,我面臨着四種變量:我可以說,在動態類型綁定的語言中,所有變量都分配在一個堆上嗎?

  1. 靜態變量:這些變量在執行前(即編譯期間)綁定到內存,並在整個執行過程中保持綁定狀態。
  2. 堆棧動態變量:這些變量在編譯時靜態綁定到某個類型,但它們沒有綁定到內存位置,直到代碼執行達到聲明。
  3. 顯式堆動態變量:這些變量通過顯式運行時,程序員指定的指令進行分配和釋放。堆,而不是堆棧,用於提供所需的存儲單元。
  4. 隱式堆動態變量:這些變量的所有屬性(包括內存單元)在分配給它們的值時都會被綁定。

我的問題是關於2型和4在編程語言,其類型招標是動態的(PHP和Ruby,Python和......)所有變量似乎是類型4.

是是真的?所有變量甚至局部變量都放在堆上?這是一個實現的東西,還是不可能實現一種動態類型綁定的語言,其中局部變量放在堆棧中,其他堆放在堆中?

回答

1

不是。鍵入和分配之間沒有關聯。第一種是語言功能,第二種(通常)是具體實現的細節,可能取決於特定的優化和其他因素。有些變量根本不會被「分配」。在更高級的語言中,假設變量和分配之間有任何關聯甚至是錯誤的 - 他們只是在程序文本中命名了某些值。

唯一的關係類型與所有這些是他們使更有趣的優化,或至少使他們更容易。

+0

謝謝,我真的期待這個答案,分配和打字之間沒有關聯。但是,我不確定,因爲我沒有在Sebesta的書中找到這個答案。 – 2013-03-01 12:10:15

+0

在我認爲你指的是@Bruno Mateus的章節中,Sebesta給出了一個隱含堆動態的javascript數組的示例,但他似乎從未解釋爲什麼數組具有這種存儲綁定。就我而言,我發現這令人困惑。 – 2016-02-11 17:17:19

相關問題