2009-05-05 89 views
1

動態語言如何決定爲變量分配多少內存? 例如。編譯器如何在沒有太多內存開銷的情況下將variable = 5更改爲variable =「xxx」?它什麼時候使用硬件堆棧?它何時使用內存堆?動態語言和變量分配

回答

4

編譯器爲每個變量分配足夠的內存來存放指針加上語言運行庫需要的任何元數據。但我認爲你的意思是詢問爲每個對象分配了多少內存。在這種情況下,答案是它取決於對象的類型。當一個變量被賦值給一個不同的對象時,與該變量相關的指針會改變它指向的內容。

1

當然,答案因語言而異 - 託管動態語言和低級實現語言。這適用於Perl並不一定適用於Python,也不適用於Tcl適用於Java或LISP或......它們是否被視爲動態語言。

在Perl中,有一個名爲SV(標量變量)的C級結構,其中包含不同版本的變量值的不同存儲。這些往往是以堆爲基礎的;字符串的存儲總是以堆爲基礎,儘管從未轉換爲字符串的純數字值可能在嚴格在堆棧中的SV中。在Perl中,這些東西都是引用計數的(並且是mortalized,或永久化的,以及各種其他有趣的術語)。更復雜的類型(AV,HV,RV等)基於SV。