Являются ли статические члены данных и статические методы класса в C++ статическими объектами?

С прагматики языка программирования, Скотт

Время жизни объекта обычно соответствует одному из трех основных механизмов распределения памяти, используемых для управления пространством объекта:

  1. Статическим объектам присваивается абсолютный адрес, который сохраняется на протяжении всего выполнения программы.

  2. Стековые объекты распределяются и освобождаются в порядке "последний пришел - первый вышел", обычно в сочетании с вызовами и возвратами подпрограмм.

  3. Объекты кучи могут быть выделены и освобождены в произвольные моменты времени. Они требуют более общего (и дорогого) алгоритма управления хранилищем.

Являются ли статические члены данных и статические методы класса в C++ статическими объектами в книге PLP?

Выделено ли хранилище для статических членов данных и статических методов класса во время компиляции или во время выполнения?

Где они расположены?

Благодарю.

1 ответ

Являются ли статические члены данных и статические методы класса в C++ статическими объектами в книге PLP?

Статические данные членов, да. И статические объекты внутри функций тоже да. Также объекты объявлены в области видимости файла.

Выделено ли хранилище для статических членов данных и статических методов класса во время компиляции или во время выполнения?

Если под распределением вы имеете в виду выделение памяти, их объем памяти зарезервирован во время компиляции, и пространство фактически выделяется в пространстве процесса компоновщиком во время соединения (или динамическим загрузчиком во время загрузки). В любом случае, задолго до запуска.

Однако статические объекты, объявленные в области видимости файла или класса, инициализируются во время выполнения до вызова функции main().

Статические объекты, определенные в функциях, различны. Они инициализируются при первом прохождении кода по ним.

Где они расположены?

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

Другие вопросы по тегам