Russian Qt Forum
Ноябрь 26, 2024, 02:22 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: под что и как выделяется память? (очень глупый вопрос)  (Прочитано 3428 раз)
spirits25
Гость
« : Май 15, 2013, 10:53 »

Привет.

Меня интересует, как выделяется память для объектов. Точнее для методов класса. Ведь исполняемый код методов тоже требует памяти?

Например, у меня есть класс с несколькими достаточно большими методами. При создании объекта выделится помять под него (под свойства и методы). А если создать N объектов, то под каждый выделится столько же памяти, несмотря на то, что методы у них идентичны и память по сути нужна только для свойств?

И если так, то в некоторых случаях, возможно, лучше большой метод, выполняющийся один раз вынести и сделать просто отдельной функцией (потеряем в производительности, выиграем в памяти)? Или всё, что я написал - бред?=)

Спасибо.
Записан
mutineer
Гость
« Ответ #1 : Май 15, 2013, 11:01 »

Код лежит в отдельном от данных сегменте памяти, при выделении памяти под объект класса память расходуется только на служебную информацию и данные в классе. Методы лежат отдельно в единственном экземпляре для всех объектов класса
Записан
spirits25
Гость
« Ответ #2 : Май 15, 2013, 11:05 »

Код лежит в отдельном от данных сегменте памяти, при выделении памяти под объект класса память расходуется только на служебную информацию и данные в классе. Методы лежат отдельно в единственном экземпляре для всех объектов класса

А как дела с виртуальными методами? в памяти хранятся все возможные методы, а объект обращается к нужному?
Записан
Vass
Гость
« Ответ #3 : Май 15, 2013, 11:18 »

Да, если в классе есть виртуальные методы то у класса появляется скрытое поле, - указатель на таблицу виртуальных вызовов.
Соответственно, когда класс наслдедник переопределяет виртуальный метод при создании его инстансов меняется виртуальная таблица.
Записан
spirits25
Гость
« Ответ #4 : Май 15, 2013, 11:32 »

Да, если в классе есть виртуальные методы то у класса появляется скрытое поле, - указатель на таблицу виртуальных вызовов.
Соответственно, когда класс наслдедник переопределяет виртуальный метод при создании его инстансов меняется виртуальная таблица.

Всё правильно, как и должно быть=)
Всем спасибо за разъяснения!
Записан
RedDog
Гость
« Ответ #5 : Май 15, 2013, 12:06 »

А где хранятся статические методы и статические члены класса?
Записан
mutineer
Гость
« Ответ #6 : Май 15, 2013, 12:13 »

А где хранятся статические методы и статические члены класса?

Статические методы хранятся там же, где и нестатические. А статические члены класса там же, где и статические обычные переменные:)
Записан
Vass
Гость
« Ответ #7 : Май 15, 2013, 13:07 »

А статические члены класса там же, где и статические обычные переменные:)
Кроме static const переменных, эти скорее всего окажутся либо в read-only блоке, либо вообще будут заинлайнены в код.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.143 секунд. Запросов: 20.