В типичном сеансе работы с Windows множество приложений мно-
гократно открываются и закрываются, поэтому нерационально загру-
жать каждое приложение в память после предыдущего - Windows скоро
исчерпает память. Вместо этого Windows, чтобы удовлетворить пот-
ребности других приложений или самой Windows, может перемещать
память большинства приложений в другую часть памяти или на диск.
Таким образом, приложение Windows должно соответствовать ди-
намическому распределению памяти Windows и избегать прямого обра-
щения к адресам памяти. Например, традиционный указатель на ячей-
ку памяти может быстро стать недопустимым, когда Windows пере-
распределит память, так как может указывать на ячейку памяти, ко-
торая используется для чего-то еще.
Вместо указателей Windows использует описатели, которые по
существу представляют собой указатели на указатели. Описатели -
это номера, использующиеся в качестве индексов в обслуживаемой
Windows таблице указателей. Таким образом, приложения Windows
ссылаются на окно или содержимое экрана (область для отображения
на экране) по описателю. Имеются также указатели экземпляров при-
ложений, строк, средств отображения и ресурсов, таких как меню и
пиктограммы.
При обычной работе вам не потребуется иметь дело с самими
описателями. Вы можете выделять и освобождать память в динамичес-
ки распределяемой области с помощью обычных подпрограмм New,
Dispose, GetMem и FreeMem, а Borland Pascal будет взаимодейство-
вать с Windows и обеспечивать для нее информацию о том, на что
фактически ссылаются эти указатели.
Одним из основных преимуществ управления памятью в Windows
является возможность совместно использовать в приложениях скомпи-
лированный код. Например, если пользователь выполняет два экземп-
ляра одного и того же приложения, то эти приложения используют
один и тот же скомпилированный код в памяти. Аналогично, приложе-
ние может динамически загружать библиотечный модуль, совместно
используемый в нескольких прикладных программах. Это называется
динамически компонуемой библиотекой - DLL.