Сколько памяти выделяется для пользовательского класса в C ++ - PullRequest
1 голос
/ 21 октября 2010

Я понимаю, что определенный объект типа данных имеет определенный размер буфера. Например. символ - 1 байт. Итак, при создании самоопределяемого объекта класса,

  1. Сколько памяти выделено для объект a?
  2. Количество выделенной памяти отличается, если объект создан в стеке или куче ?
  3. Количество выделенной памяти исправлено или может быть изменено ?

Создание пользовательского экземпляра класса:

Animal a; //stack memory
a.makeSound();

Animal *a = new Animal(); //heap memory
a->makeSound();

Ответы [ 3 ]

3 голосов
/ 21 октября 2010

В обоих случаях будет выделено не менее sizeof(Animal) байтов.

В случае выделения стека для выравнивания может использоваться некоторая дополнительная память.В случае кучи памяти некоторая дополнительная память, вероятно, будет использоваться для хранения данных службы кучи.Вы можете влиять на точный объем памяти, изменяя класс - например, для выделения кучи вы можете определить пользовательский operator new для этого класса и сделать так, чтобы он выделял необходимый объем памяти.

0 голосов
/ 21 октября 2010

Сколько памяти выделено для объект а?

Зависит от определения класса животных.

Количество выделенной памяти отличается, если объект создан на стек или куча?

Количество

Количество выделенной памяти исправлено или может быть изменено?

В зависимости от 32-битной или 64-битной системы и конкретных реализаций компилятора, таких как заполнение и т. Д., Объем выделяемой памяти может варьироваться.

0 голосов
/ 21 октября 2010
  1. Объем памяти, необходимый для представления Animal, зависит от членов данных Animal.
  2. Выделения кучи используют больше памяти, чем выделения стека, поскольку ячейки кучи хранят метаинформацию, связанную с кучей, связанной с каждой ячейкой.
  3. В строгом смысле размер объекта является фиксированным.Однако Animal может содержать и собственные ссылки на другие объекты кучи.Эти объекты кучи могут быть изменены во время выполнения.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...