Статическое распределение против Динамического распределения против Автоматического распределения - PullRequest
10 голосов
/ 08 октября 2009

В чем различия между статическим, динамическим и автоматическим распределением?

Ответы [ 2 ]

14 голосов
/ 08 октября 2009

Там будут детали для конкретного языка, но общая идея:

  • Статический: выделяется при запуске программы, существует на весь срок жизни программы
  • Автоматически: распределяется при входе в блок, существует в течение этого блока

Динамическое распределение требует немного большего объяснения: оно выделяется, когда вы выделяете его (например, что-то вроде «нового XXX»). В (большинстве реализаций) C ++ он будет существовать до тех пор, пока вы его явно не удалите. С большинством более новых языков (например, Java, C #) он будет существовать до тех пор, пока сборщик мусора не определит, что он больше не доступен, и в этот момент он будет автоматически уничтожен.

Не все языки имеют все три формы распределения. В некоторых случаях (например, Java), даже если поддерживается форма выделения, существуют такие ограничения, как разрешение автоматического выделения для встроенных типов, но требование динамического выделения для типов объектов (то есть экземпляров классов).

3 голосов
/ 08 октября 2009

Статическое выделение - это память, которая была выделена для приложения при первой загрузке. Этот раздел памяти оставлен для использования только с этим приложением и снова становится доступным после закрытия программы.

Динамическое выделение - это память, которая выделяется по мере необходимости и освобождается / освобождается, когда она больше не нужна. Кучи и стеки являются примерами областей памяти, которые могут быть выделены динамически.

...