静态分配与动态分配与自动分配

时间:2009-10-08 00:36:47

标签: dynamic static oop memory-management

静态,动态和自动分配有什么区别?

2 个答案:

答案 0 :(得分:14)

将会有特定于语言的详细信息,但总体思路是:

  • 静态:在程序启动时分配,存在于程序的整个生命周期
  • 自动:在进入某个区块时分配,在该区块的持续时间内存在

动态分配需要更多解释:它在您分配时分配(例如,使用'new XXX'之类的东西)。在C ++的(大多数实现)中,它会一直存在,直到您明确删除它为止。使用大多数更新的语言(例如Java,C#),它将一直存在,直到垃圾收集器确定它不再可访问,此时它将被自动销毁。

并非所有语言都具有所有三种形式的分配。在某些情况下(例如Java),即使支持一种分配形式,也存在一些限制,例如允许自动分配内置类型,但需要动态分配对象类型(即类的实例)。

答案 1 :(得分:3)

静态分配是首次加载应用程序时为应用程序预留的内存。此部分内存仅保留用于该应用程序,并在程序关闭后再次可用。

动态分配是根据需要分配的内存,并在不再需要时释放/释放。堆和堆栈是可以动态分配的内存区域的示例。