![](/logo_grey.gif)
Последние записи
- Как в Python+Selenium webdriver открыть новую вкладку в уже открытом браузере?
- Lazarus, проверка существования строки таблице
- BASM и record, обращение к полям записи
- Web PHP Framework Symfony
- Относительный путь для вывода картинки на html странице
- Массовое открытие гиперссылок в браузере
- Скопировать значение строки из таблицы в textarea
- Рамки для страниц отчетов
- Вывод StdOut консоли в TMemo
- Чтение из файла большого размера (нехватка памяти)
![](http://programmersclub.ru/slurm3.jpg)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
![](http://programmersclub.ru/katajpg.jpg)
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
24th
Мар
Выделение памяти
Posted by maloy under Архив, Общалка
mutabor
Интересует такой вопрос, разъясните пожалуйста кто в курсе.
Например у меня много глобальных переменных в проекте. Если сделать их полями класса (формы), то тогда насколько я знаю при создании класса память выделится из кучи.
Как происходит выделение памяти для глобальных?
Если форма главная и до завершения программы закрываться не будет, есть ли принципиальная разница где объявлять переменные?
BOBAH13
Вроде для глобальных, это просто при загрузке и проецировании приложения в памяти выделяется место, и ваша глобальная переменная уже имеет определенный компилятором адресс в памяти, т.е. как и сегмент кода так и сегмент даных она отображается в памяти при запуске приложения.
Думаю разницы особой, вы не почуствуите.
По моему, все зависит не от того где переменная определена, а от того, с откуда вы ее вызываите
Ну в общих чертах, я где-то так представляю этот процесс, а так сам даже не задумывался в серьез, не зачем
rpy3uH
В Windows сегментов данных нет,есть только один сегмент для кода, данных и стека.
принципиальной разницы нет.
Например у меня много глобальных переменных в проекте. Если сделать их полями класса (формы), то тогда насколько я знаю при создании класса память выделится из кучи.
|
а если сделать обычной глобальной переменной, то память для неё будет выделена при запуске приложения и освобождена при закрытия. Если она будет в форме, то память под неё будет выделена при создании формы.
память под глобальные переменные выделяется закгрузчиком исполняемого файла при запуске программы. В исполняемом файле есть секция данных, у секции данных есть два важных параметра фактический размер и размер, который должен быть после загрузки в память. При компиляции компилятор считает общий размер всех перемернных типа
var
x:integer = 56;
(т.е. те, которым заданы начальные значения, инициализированные переменные)
этот размер и считается фактическим размером секции данных, все эти переменные скидываются в секцию данных исполняемого файла. Потом компилятор считает общий размер все переменных типа
var
y:integer;
(т.е. те, которым не заданы начальные значения, неинициализированные переменные)
полученный размер прибавляет к размеру инициализированных переменных, этот размер является размером секции данных которая должна быть в памяти. Неинициализированны переменные уже не скидываются в исполняемый файл их размер просто заносится в специальное поле. (неинициализированных переменных мы может указать сколько угодно и при этом размер экзешника не увеличится)
При загрузке загрузчик программ, смотрит размер данных, которые должны быть в памяти, и выделяет требуемый размер памяти (для инициализированных переменных и для неинициализированных переменных), потом копирует в эту память инициализированные переменные (данные из секции данных исполняемого файла), в результате чего у нас выделена память для всех переменных и в инициализированные переменные уже занесены нужные нам значения.
тема на форуме от 2009 года
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
![пеллетные котлы](http://programmersclub.ru/respective.jpg)
пеллетные котлы
![пеллетный котел](http://programmersclub.ru/emtas.jpg)
Пеллетный котел Emtas
![форум программистов](http://programmersclub.ru/banf336х280.gif)
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)