Время жизни статических и автоматических переменных в C отличается:
- Статические переменные имеют выделенную память и определённое значение в течение всего времени выполнения программы. 1 Выделение памяти и инициализация производятся только один раз перед началом работы программы. 1
- Автоматические переменные имеют выделенную память и определённое значение только внутри блока, в котором они определены или объявлены. 1 Автоматическому идентификатору выделяется новая память при каждом входе программы в соответствующий блок, при выходе программы из этого блока память (и значение) идентификатора освобождается. 1
Таким образом, память для статических переменных выделяется при запуске программы и не меняется, а также не освобождается до окончания работы приложения, а память для автоматических данных выделяется в стеке, указатель на вершину которого сохраняется перед вызовом функции и восстанавливается после выхода из неё. 2