Являются ли статические члены данных и статические методы класса в C++ статическими объектами?
С прагматики языка программирования, Скотт
Время жизни объекта обычно соответствует одному из трех основных механизмов распределения памяти, используемых для управления пространством объекта:
Статическим объектам присваивается абсолютный адрес, который сохраняется на протяжении всего выполнения программы.
Стековые объекты распределяются и освобождаются в порядке "последний пришел - первый вышел", обычно в сочетании с вызовами и возвратами подпрограмм.
- Объекты кучи могут быть выделены и освобождены в произвольные моменты времени. Они требуют более общего (и дорогого) алгоритма управления хранилищем.
Являются ли статические члены данных и статические методы класса в C++ статическими объектами в книге PLP?
Выделено ли хранилище для статических членов данных и статических методов класса во время компиляции или во время выполнения?
Где они расположены?
Благодарю.
1 ответ
Являются ли статические члены данных и статические методы класса в C++ статическими объектами в книге PLP?
Статические данные членов, да. И статические объекты внутри функций тоже да. Также объекты объявлены в области видимости файла.
Выделено ли хранилище для статических членов данных и статических методов класса во время компиляции или во время выполнения?
Если под распределением вы имеете в виду выделение памяти, их объем памяти зарезервирован во время компиляции, и пространство фактически выделяется в пространстве процесса компоновщиком во время соединения (или динамическим загрузчиком во время загрузки). В любом случае, задолго до запуска.
Однако статические объекты, объявленные в области видимости файла или класса, инициализируются во время выполнения до вызова функции main().
Статические объекты, определенные в функциях, различны. Они инициализируются при первом прохождении кода по ним.
Где они расположены?
Везде, где решает компоновщик или загрузчик. На это может повлиять написание собственного сценария компоновщика (боюсь, за рамками этого ответа).