Последние записи
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
- Взаимодействие через командную строку
- Перенести программу из Delphi в Lazarus
- Определить текущую ОС
- Автоматическая смена языка (раскладки клавиатуры)
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
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
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)