|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.08.2009, 14:39 | #1 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Выделение памяти
Интересует такой вопрос, разъясните пожалуйста кто в курсе.
Например у меня много глобальных переменных в проекте. Если сделать их полями класса (формы), то тогда насколько я знаю при создании класса память выделится из кучи. Как происходит выделение памяти для глобальных? Если форма главная и до завершения программы закрываться не будет, есть ли принципиальная разница где объявлять переменные?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
26.08.2009, 15:21 | #2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
Вроде для глобальных, это просто при загрузке и проецировании приложения в памяти выделяется место, и ваша глобальная переменная уже имеет определенный компилятором адресс в памяти, т.е. как и сегмент кода так и сегмент даных она отображается в памяти при запуске приложения.
Думаю разницы особой, вы не почуствуите. По моему, все зависит не от того где переменная определена, а от того, с откуда вы ее вызываите Ну в общих чертах, я где-то так представляю этот процесс, а так сам даже не задумывался в серьез, не зачем |
26.08.2009, 15:24 | #3 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Глобальные переменные находятся в сегменте данных.
Но я в этом вопросе не очень разбираюсь, поэтому практической разницы не знаю..
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
26.08.2009, 15:48 | #4 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
В Windows сегментов данных нет,есть только один сегмент для кода, данных и стека.
принципиальной разницы нет. Цитата:
память под глобальные переменные выделяется закгрузчиком исполняемого файла при запуске программы. В исполняемом файле есть секция данных, у секции данных есть два важных параметра фактический размер и размер, который должен быть после загрузки в память. При компиляции компилятор считает общий размер всех перемернных типа Код:
этот размер и считается фактическим размером секции данных, все эти переменные скидываются в секцию данных исполняемого файла. Потом компилятор считает общий размер все переменных типа Код:
полученный размер прибавляет к размеру инициализированных переменных, этот размер является размером секции данных которая должна быть в памяти. Неинициализированны переменные уже не скидываются в исполняемый файл их размер просто заносится в специальное поле. (неинициализированных переменных мы может указать сколько угодно и при этом размер экзешника не увеличится) При загрузке загрузчик программ, смотрит размер данных, которые должны быть в памяти, и выделяет требуемый размер памяти (для инициализированных переменных и для неинициализированных переменных), потом копирует в эту память инициализированные переменные (данные из секции данных исполняемого файла), в результате чего у нас выделена память для всех переменных и в инициализированные переменные уже занесены нужные нам значения. Последний раз редактировалось rpy3uH; 26.08.2009 в 16:04. |
|
26.08.2009, 16:08 | #5 | |||
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
Цитата:
http://www.beneto.ru/showed.php?id=525 Цитата:
Цитата:
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
|||
26.08.2009, 16:13 | #6 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
это не сегмент, это секция! Надо говорить секция данных. Сегмент данных - это более глобальное и общее понятие.
Последний раз редактировалось rpy3uH; 26.08.2009 в 16:17. |
26.08.2009, 16:17 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
26.08.2009, 16:19 | #8 |
В тени
Старожил
Регистрация: 19.12.2008
Сообщений: 5,788
|
А.. тогда ясно.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем. ___________________________________ ___________________________________ _______ [=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль] |
26.08.2009, 18:16 | #9 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Вопрос исчерпан, всем спасибо, особенно грузину!
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Динамическое выделение памяти | FW-TOT | Общие вопросы C/C++ | 2 | 19.12.2008 00:42 |
До выделение памяти | MAKTE | Общие вопросы C/C++ | 4 | 20.05.2008 21:34 |
Выделение памяти | antoha.by | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 29.04.2008 20:04 |
выделение оперативной памяти | Alar | Общие вопросы Delphi | 0 | 29.10.2006 21:56 |