Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Память под обычные переменные выделяется одновременно с началом работы программы (или подпрограммы для локальных переменных) и освобождается по окончании работы программы (подпрограммы). Такие переменные называются статическими.
Использование указателей позволяет создавать и уничтожать переменные в любом месте программы. Под образованием и уничтожением переменных имеется в виду отведение памяти, достаточного для хранения значения базового для указателя типа, и соответственно ее освобождение.
Без такого динамического выделения памяти невозможно представить себе работу никакой сложной программы. Представьте себе, например, что ваша операционная система при запуске резервировала бы память под все возможные задачи, которые она умеет выполнять. При работе с большими структурами данных почти всегда используются указатели.
Выделение и освобождение памяти в Паскале делается стандартными процедурами New и Dispose.
Пусть p – типизированный указатель.
New(p) – выделяет память под хранение значения базового для указателя p типа, и записывает в адрес этой области памяти. Dispose(p) – освобождает память, на которую ссылается указатель p. Значение указателя при этом не меняется, но незарезрвированную память могут использовать другие приложения, так что работать с ней во избежание конфликтов с другими программами не рекомендуется. Хорошим тоном будет записать в переменную p значение nil сразу после освобождения памяти процедурой Dispose. |
Для нетипизированных указателей эти процедуры неприменимы, так как непонятно, сколько байт памяти надо выделять. Для резервирования и возвращения памяти в этом случае используются процедуры GetMem и FreeMem.
GetMem(p, size) – выделяет size байт и записывает их адрес в нетипизированный указатель p. FreeMem(p, size) – освобождает память, имеющую адрес p. size – размер ранее зарезервированной памяти. |
Всю доступную оперативную память компьютера принято называть кучей. При динамическом выделении памяти говорят о взятии памяти из кучи. При освобождении памяти (Dispose или FreeMem) говорят, что память возвращена в кучу.
Следующий раздел:
Предыдущий раздел: