Динамикалық жадыны бөлу және босату Мұнда типтендірілген және типтендірілмеген нұсқауыштар үшін динамикалық жадыны бөлудің (резервтеудің) ерекшеліктері қарастырылады. Және де алдында бөлінген жадыны қалай босатуға болатынын анықтаймыз.
Типтендірілген нұсқауыштар үшін Типтендірілген нұсқауыштар сілтейтін динамикалық түрде орналастырылған айнымалылар үшін жады сәйкесінше New және Dispose процедуралары арқылы бөлінеді және босатылады. New процедурасы типтендірілген нұсқауыш сілтейтін жаңа динамикалық айнымалы жасайды. Бұл процедураның тақырыбы мынадай:
Procedure New (Var p: Pointer);
Мұндағы р – типтендірілген нұсқауыш.
Dispose процедурасы типтендірілген нұсқауыш сілтейтін динамикалық айнымалының жадындағы алып тұрған орнын босатады. Тақырыбы мынадай:
Procedure Dispose (Var p: Pointer);
Мұндағы р – типтендірілген нұсқауыш.
Динамикалық жадыда орналасқан айнымалыларға нұсқауыштар қолданылған программаның схематикалық түрі төмендегідей болады.
Var
px, py: ^ char;
pz: ^ integer;
begin
New (px);
New (py);
New (pz);
px ^:=’A’;
py ^:=’7’;
pz ^:=’666’;
…
Dispose (px);
Dispose (py);
Dispose (pz);
…
end.
Бұл программада айнымалыларды сипаттау бөлімінде 3 типтендірілген нұсқауыш жарияланған. Соңынан программа денесінде бұл нұсқауыштар сілтенетін динамикалық айнымалылар үшін New процедурасының көмегімен динамикалық жады бөлінген. Осыдан кейін динамикалық айнымалыға типтеріне сәйкес мәндер меншіктеуге және оларды әр түрлі өрнектерде қолдануға болады. Px, Py және Pz айнымалылардың қажеті болмаған кезде олар үшін бөлінген жады Dispose процедурасының көмегімен босатылады. Осыдан кейін босатылған жадыны программада жарияланған және басқа операторларда қолданылатын басқа айнымалылар үшін резервтеуге болады. Dispose және New процедурасын қолданатын программа мысалы төмендегідей.
Program New_Disp;
Type
Ar=array [1..10] of integer;
Var
P:= ^ ar;
Begin
Writeln;
Writeln(‘Жады бөлгенге дейін бос’, MemAvail, ‘байт’);
New (P);
Writeln(‘Жады бөлгеннен кейін бос’, MemAvail, ‘байт’);
Dispose(p);
Writeln(‘Жады босатқаннан кейін бос’, MemAvail, ‘байт’);
End.
Мұнда MemAvail функциясының көмегімен динамикалық жадының бос көлемі туралы мәлімет экранға шығарылады, яғни жадыны бөлгенге дейінгі және жадыны бөлгеннен кейінгі, сол сияқты жадыны босатқаннан кейінгі бос орын туралы мәліметтер көрсетіледі.