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