2009-10-08 164 views

回答

11

會有特定語言的細節,但總體思路是:

  • 靜:在程序啓動時分配,存在着程序的整個生命
  • 自動:在進入分配成塊,存在該塊的持續時間

動態分配需要更多的解釋:它在分配時進行分配(例如,使用類似'new XXX'的東西)。在C++的(大部分實現中),它會一直存在,直到你明確地刪除它。使用大多數較新的語言(例如Java,C#)它會一直存在,直到垃圾收集器確定它不再可訪問,此時它將自動銷燬。

並非所有的語言都有三種形式的分配。在某些情況下(例如Java),即使支持某種形式的分配,也存在限制,例如允許爲內置類型自動分配,但需要爲對象類型(即類的實例)進行動態分配。

3

靜態分配是在第一次加載時爲應用程序預留的內存。這部分內存僅保留在該應用程序中,並在程序關閉後再次使用。

動態分配是根據需要分配的內存,並在不再需要時釋放/釋放。堆和堆棧是可以動態分配的內存區域的示例。