Russian Qt Forum

Qt => Вопросы новичков => Тема начата: spirits25 от Май 15, 2013, 10:53



Название: под что и как выделяется память? (очень глупый вопрос)
Отправлено: spirits25 от Май 15, 2013, 10:53
Привет.

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

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

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

Спасибо.


Название: Re: под что и как выделяется память? (очень глупый вопрос)
Отправлено: mutineer от Май 15, 2013, 11:01
Код лежит в отдельном от данных сегменте памяти, при выделении памяти под объект класса память расходуется только на служебную информацию и данные в классе. Методы лежат отдельно в единственном экземпляре для всех объектов класса


Название: Re: под что и как выделяется память? (очень глупый вопрос)
Отправлено: spirits25 от Май 15, 2013, 11:05
Код лежит в отдельном от данных сегменте памяти, при выделении памяти под объект класса память расходуется только на служебную информацию и данные в классе. Методы лежат отдельно в единственном экземпляре для всех объектов класса

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


Название: Re: под что и как выделяется память? (очень глупый вопрос)
Отправлено: Vass от Май 15, 2013, 11:18
Да, если в классе есть виртуальные методы то у класса появляется скрытое поле, - указатель на таблицу виртуальных вызовов.
Соответственно, когда класс наслдедник переопределяет виртуальный метод при создании его инстансов меняется виртуальная таблица.


Название: Re: под что и как выделяется память? (очень глупый вопрос)
Отправлено: spirits25 от Май 15, 2013, 11:32
Да, если в классе есть виртуальные методы то у класса появляется скрытое поле, - указатель на таблицу виртуальных вызовов.
Соответственно, когда класс наслдедник переопределяет виртуальный метод при создании его инстансов меняется виртуальная таблица.

Всё правильно, как и должно быть=)
Всем спасибо за разъяснения!


Название: Re: под что и как выделяется память? (очень глупый вопрос)
Отправлено: RedDog от Май 15, 2013, 12:06
А где хранятся статические методы и статические члены класса?


Название: Re: под что и как выделяется память? (очень глупый вопрос)
Отправлено: mutineer от Май 15, 2013, 12:13
А где хранятся статические методы и статические члены класса?

Статические методы хранятся там же, где и нестатические. А статические члены класса там же, где и статические обычные переменные:)


Название: Re: под что и как выделяется память? (очень глупый вопрос)
Отправлено: Vass от Май 15, 2013, 13:07
А статические члены класса там же, где и статические обычные переменные:)
Кроме static const переменных, эти скорее всего окажутся либо в read-only блоке, либо вообще будут заинлайнены в код.