Из книги «Прагматика языка программирования» Скотта
Время жизни объекта обычно соответствует одному из трех основных механизмов распределения памяти, используемых для управления пространством объекта:
Статическим объектам присваивается абсолютный адрес, который сохраняется на протяжении всего выполнения программы.
Объекты стека выделяются и освобождаются в порядке «последний пришел – первый ушел», обычно в сочетании с вызовами и возвратами подпрограмм.
- Объекты кучи могут быть выделены и освобождены в произвольное время. Для них требуется более общий (и дорогой) алгоритм управления хранилищем.
Например, в C статические объекты должны быть инициализированы константными выражениями (выражениями, которые можно вычислить во время компиляции).
Я не уверен, так ли это в других языках и даже в каких других языках также есть статические объекты.
В общем, должны ли статические объекты быть инициализированы? При инициализации должны ли они инициализироваться выражениями, которые можно вычислить во время компиляции?
Под инициализацией я подразумеваю явную или неявную (то есть автоматически выполняемую реализацией языка), в отличие от неинициализации. Итак, перефразируя мой вопрос: вообще, могут ли статические объекты оставаться неинициализированными либо программами, либо компиляторами?
Спасибо.
static
по умолчанию инициализируется 0 (или эквивалентом), переменнаяnon static
должна быть инициализирована на самом деле, иначе в вашем стеке памяти будет какое-то мусорное значение. - person James Maa   schedule 16.09.2017