Название: под что и как выделяется память? (очень глупый вопрос) Отправлено: 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 блоке, либо вообще будут заинлайнены в код. |