Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Статическое/Динамическое размещение данных

Автор: IKh 23.11.2009 20:07

Здравствуйте.

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

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

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

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

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

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


Автор: volvo 23.11.2009 20:45

Цитата
Правильно ли начинать использовать динамическую память если объем памяти переменных (при отсутствии констант) не превышает 64Кбайта?
Понимаешь в чем дело... Ведь в Паскале (речь сейчас о 16-битных версиях, разумеется, с 32-битными попроще будет) для всех модулей выделяется один сегмент данных. Вот здесь - подробнее: http://forum.pascal.net.ru/index.php?s=&showtopic=24644&view=findpost&p=136483

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

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

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

Автор: IKh 24.11.2009 4:33

Вольво,

спасибо за помощь