2015-04-19 69 views
2

我在做家庭作業時遇到了一些麻煩。我進行了大量的研究,但都陷入了困境。分配如下:Python中左值綁定時刻的內存分配類型

制定和實施,其中顯示了不同 變量類型指定的語言工具,根據自己的 通過分類與左值結合當下的例子。

我已經研究了不同類型,並得出如下:

變量可以基於與左值結合當下4種類型進行劃分。

  • 靜態:內存運行時和程序
  • 自動的整個執行過程中最後在存儲器中的變量(或半靜態)之前分配:當裝入變量的範圍內存被分配,和解除分配時留下範圍。
  • 動態:內存僅在執行期間需要時分配。 (我認爲這是爲了代替在例如 函數調用中分配,它在實際變量聲明爲 run時分配)。內存在需要時被釋放。指針是我發現這個的一個例子,我找到了 。
  • 半動態:我還沒有找到明確的定義,但我見過的一個例子是數組,其大小在運行時才知道。

我在Pascal中有每個示例,但是我爲此任務指定的語言是Python。我找不到Python使用的分配類型。我已經看到Python使用Dynamic allocation的here,但我不確定這是否真的是動態的(由垃圾回收器管理的手動釋放)還是自動的(因爲程序員不需要手動執行此操作)。我也不確定像類屬性,全局變量和常量這些東西是靜態的還是與其他變量(自動/動態)一樣。

任何有關python使用的內存類型的見解,或者甚至審查每種類型的定義都將不勝感激。如前所述,我已經研究過這個,但是我發現的或者不清楚(對我)或者編程特定的問題(即,如何在Python中手動分配/釋放內存),而不是上面提到的Python使用的類型。

+0

好問題!如果不真正考慮這一點,我只能確認你已經說過的內容:Python中的大部分內存分配都是動態的。即使是類(它們只是Python中的對象)也是動態創建/分配的。我會嘗試考慮一些邊緣情況(模塊,迭代變量等),並在稍後發佈答案。 – halflings

回答

2

我做了一些研究,但是在Python中找不到任何對靜態內存分配的參考,或者更準確地說,它看起來大多數內存管理方面並不是由Python語言指定的,決定。我相信所有的CPython的內存管理都是「動態的」,因爲它的運行時管理一個私有堆(只要需要)爲對象分配內存(正如我在之前的評論中所說的那樣,差不多一切都是對象在Python中!)

雖然與您的問題沒有直接關係,但可以在CPython中進行「鍵入」分配,例如使用typed array type

現在,PyPy是一個不同的野獸。它使用RPython作爲運行時解釋器,它似乎在內存分配方面做了很多更有趣的事情,比如分析如何使用user defined classes are used

現在我不確定這是否歸類爲自動分配,但這可能是您的報告中要討論的問題!

+0

謝謝您花時間研究這個問題!我一定會在我的報告中提及它:)我還會和老師覈對一下,如果她告訴我任何新的東西,我會讓你知道的:) – AkkaVoskuil