Russian Qt Forum
Ноябрь 26, 2024, 02:25
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
под что и как выделяется память? (очень глупый вопрос)
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: под что и как выделяется память? (очень глупый вопрос) (Прочитано 3429 раз)
spirits25
Гость
под что и как выделяется память? (очень глупый вопрос)
«
:
Май 15, 2013, 10:53 »
Привет.
Меня интересует, как выделяется память для объектов. Точнее для методов класса. Ведь исполняемый код методов тоже требует памяти?
Например, у меня есть класс с несколькими достаточно большими методами. При создании объекта выделится помять под него (под свойства и методы). А если создать N объектов, то под каждый выделится столько же памяти, несмотря на то, что методы у них идентичны и память по сути нужна только для свойств?
И если так, то в некоторых случаях, возможно, лучше большой метод, выполняющийся один раз вынести и сделать просто отдельной функцией (потеряем в производительности, выиграем в памяти)? Или всё, что я написал - бред?=)
Спасибо.
Записан
mutineer
Гость
Re: под что и как выделяется память? (очень глупый вопрос)
«
Ответ #1 :
Май 15, 2013, 11:01 »
Код лежит в отдельном от данных сегменте памяти, при выделении памяти под объект класса память расходуется только на служебную информацию и данные в классе. Методы лежат отдельно в единственном экземпляре для всех объектов класса
Записан
spirits25
Гость
Re: под что и как выделяется память? (очень глупый вопрос)
«
Ответ #2 :
Май 15, 2013, 11:05 »
Цитата: mutineer от Май 15, 2013, 11:01
Код лежит в отдельном от данных сегменте памяти, при выделении памяти под объект класса память расходуется только на служебную информацию и данные в классе. Методы лежат отдельно в единственном экземпляре для всех объектов класса
А как дела с виртуальными методами? в памяти хранятся все возможные методы, а объект обращается к нужному?
Записан
Vass
Гость
Re: под что и как выделяется память? (очень глупый вопрос)
«
Ответ #3 :
Май 15, 2013, 11:18 »
Да, если в классе есть виртуальные методы то у класса появляется скрытое поле, - указатель на таблицу виртуальных вызовов.
Соответственно, когда класс наслдедник переопределяет виртуальный метод при создании его инстансов меняется виртуальная таблица.
Записан
spirits25
Гость
Re: под что и как выделяется память? (очень глупый вопрос)
«
Ответ #4 :
Май 15, 2013, 11:32 »
Цитата: Vass от Май 15, 2013, 11:18
Да, если в классе есть виртуальные методы то у класса появляется скрытое поле, - указатель на таблицу виртуальных вызовов.
Соответственно, когда класс наслдедник переопределяет виртуальный метод при создании его инстансов меняется виртуальная таблица.
Всё правильно, как и должно быть=)
Всем спасибо за разъяснения!
Записан
RedDog
Гость
Re: под что и как выделяется память? (очень глупый вопрос)
«
Ответ #5 :
Май 15, 2013, 12:06 »
А где хранятся статические методы и статические члены класса?
Записан
mutineer
Гость
Re: под что и как выделяется память? (очень глупый вопрос)
«
Ответ #6 :
Май 15, 2013, 12:13 »
Цитата: RedDog от Май 15, 2013, 12:06
А где хранятся статические методы и статические члены класса?
Статические методы хранятся там же, где и нестатические. А статические члены класса там же, где и статические обычные переменные:)
Записан
Vass
Гость
Re: под что и как выделяется память? (очень глупый вопрос)
«
Ответ #7 :
Май 15, 2013, 13:07 »
Цитата: mutineer от Май 15, 2013, 12:13
А статические члены класса там же, где и статические обычные переменные:)
Кроме static const переменных, эти скорее всего окажутся либо в read-only блоке, либо вообще будут заинлайнены в код.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...