На этом шаге мы рассмотрим способы управления размерами динамической памяти.
Большинство реальных прикладных программ активно использует динамические переменные. По умолчанию для кучи отводится весь объем наличной оперативной памяти, доступной операционной системе, за вычетом памяти для кода программы и статических переменных. Таким образом, размер динамической памяти может достигать 400Кб и более. Однако в ряде случаев такой объем является избыточным или даже недопустимым (например, из-за невозможности осуществить вызов какой-либо другой программы, размещенной в отдельном EXE-файле).
Сказанное определяет необходимость средств управления размерами динамической памяти,
используемой программой. В языке программирования Pascal для этого служит директива
компилятора {$M}, которая располагается в начале текста программы и имеет три
целочисленных параметра, разделителем между ними служит запятая. Первый параметр определяет
максимальный размер памяти выделяемой под стек локальных переменных, а два следующих
параметра задают минимальный и максимальный размеры динамической памяти (все параметры
указываются в байтах). Примеры директивы {$M}:
{$M 10240,0,2000000}
{$M 16384,1024,650000}
{$M 1024,0,0}
Задание минимального размера динамической памяти (второй параметр) носит ограничительный характер и устанавливает тот объем требуемой памяти, при отсутствии которого программа вообще не может выполняться. Если этот параметр есть 0, то программа будет запущена в любом случае.
Третий параметр задает максимальный размер необходимой динамической памяти и носит рекомендательный характер. Таким образом, размер динамической памяти будет определяться перед началом работы программы, исходя из реального наличия свободной оперативной памяти. Например, если при запуске программы в оперативной памяти находятся какие-либо программы (например, резидентная часть системы Norton Commander) или запуск производится из интегрированной среды Turbo Pascal, которая сама имеет довольно значительный размер, то реальный объем динамической памяти, отведенной программе, может быть меньше заказанного.
По умолчанию предполагается наличие директивы:
{$M 16384,0,655360} ,
то есть под стек выделяется 16Кбайт, под динамическую память - вся свободная оперативная память, доступная операционной системе.
Указанные параметры можно установить посредством альтернативы Options/Memory Sizes
в интегрированной среде.
Со следующего шага мы начинаем знакомиться с технологией объектно-ориентированного
программирования.