Помощь - Поиск - Пользователи - Календарь
Полная версия: Статическое/Динамическое размещение данных
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
IKh
Здравствуйте.

Пожалуйста объясните.

Память для переменных может быть выделена статически во время компиляции программы или динамически во время работ программы. Если память выделена статически, то все переменные будут расположены в одной непрерывной области памяти - сегменте данных, размер которого не превышает 65536 байт память выделенная переменным отсается за переменными до конца работы программы.

Динамическая память может быть выделена в процессе выполнения программы по требованию. Одной из причин для использования динамической пвмяти является массива больше 64 Кбайт.

Вот здесь возникает вопрос.

Вопрос: Правильно ли начинать использовать динамическую память если объем памяти переменных (при отсутствии констант) не превышает 64Кбайта? Создается ли сегмент данных статических переменных если такие не создаются, ведь указатель на динамическую переменную тоже переменная? Сегмент данных выделяется в объеме по требованию или сразу в размере 64Кбайт?

Пожалуйста, объясните, литературу по данной теме.

volvo
Цитата
Правильно ли начинать использовать динамическую память если объем памяти переменных (при отсутствии констант) не превышает 64Кбайта?
Понимаешь в чем дело... Ведь в Паскале (речь сейчас о 16-битных версиях, разумеется, с 32-битными попроще будет) для всех модулей выделяется один сегмент данных. Вот здесь - подробнее: Как не надо писать программы

То есть, если есть вероятность того, что общий размер всех статических переменных (а не только одного массива) превысит размер сегмента - то у тебя просто нет выбора, только динамическое распределение памяти.

Цитата
Создается ли сегмент данных статических переменных если такие не создаются
Это не важно, создаешь ты или нет переменные. К каждой программе на Паскале подключается модуль System, который добавляет к сегменту данных свои переменные/типизированные константы, а значит сегмент данных уже создается.

Цитата
Сегмент данных выделяется в объеме по требованию или сразу в размере 64Кбайт?
Сразу выделяется 64К. Меньше выделить нельзя, в Паскаль-программах нельзя и больше (Борланд С 3.1 работает с моделями памяти Compact/Large/Huge, что позволяет увеличить размер области данных/стека до 1Мб - в первых двух случаях - или даже больше - в случае Huge)
IKh
Вольво,

спасибо за помощь
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.