C ++ класс и объект - память - PullRequest
0 голосов
/ 29 января 2011

Что занимает память, class или object?И это в compile или execution время?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 29 января 2011

Во время компиляции расположение памяти - это деталь реализации - вам не нужно знать или заботиться.

Однако во время выполнения ... в C ++ классы определяют типы, но (если вы не активируетеRTTI, который допускает ограниченное интроспекцию в классы), как правило, сами не занимают никакой памяти 1 - это всего лишь рамки для построения и уничтожения объектов.Однако их методы - конструкторы, деструкторы, методы экземпляров и методы классов занимают некоторую часть исполняемой памяти, но компиляторы могут и оптимизируют любые такие методы, которые не используются в программе.

Экземпляры типов (то есть объектов, а также примитивов, таких как int переменные) занимают большую часть памяти в C ++, но для своих функций-членов они ссылаются на свои классы.Сколько именно памяти использует экземпляр определенного класса, полностью и полностью является деталью реализации, и вам, как правило, не нужно заботиться об этом.


1 Даже тогдаСами классы не используют память, а связанный с ними экземпляр std::typeinfo.Но опять же, это, как правило, реализация, а не штука, на которую даже опытные программисты обращают большое внимание.

0 голосов
/ 29 января 2011

Статические, локальные и глобальные переменные хранятся в сегменте данных BBS, а объекты хранятся либо в куче, либо в стеке.Объекты являются экземплярами класса, а определение класса используется компилятором для создания объекта по его описанию класса.Класс подобен инструкции «как создать таблицу самостоятельно», которая занимает только бумагу, на которой она написана, в то время как объект - это настоящая таблица, созданная вами в соответствии с инструкцией, которая занимает реальное пространство.

0 голосов
/ 29 января 2011

object instance - это тот, который занимает память во время выполнения, поскольку class является планом объекта.

Кроме того, в C ++ есть статические переменные, локальные переменные и глобальные переменные, которые также занимают память.

...