Главная » Free Pascal » Выделение памяти локальным и глобальным массивам Free Pascal

0

Программа matrix_4 демонстрирует тактику выделения памяти для глобальных массивов — статического sa1 и динамического ds1 (листинг 6.8). Массиву sa1 па- мять выделяется сразу и всем его элементам присваиваются нулевые значения. Для массива ds1 сначала выделяется 4-байтовый указатель, в который заносится Nil. После первого обращения к процедуре SetLength массиву ds1 выделяется чистая память. При повторном обращении к процедуре SetLength массиву ds1 выделяет- ся новая память, в которую копируются накопленные ранее данные, а хвост — чистится. Функция SizeOf для статического массива выдает объем занятой памяти в байтах, для динамического — только объем памяти, занятой указателем. Функция Length выдает длину любого массива в количестве элементов.

   Листинг 6 .8 .  Программа  matrix_4                                             

program matrix_4; var

sa1: array [1..10] of integer; da1: array of integer;

j: integer;

begin

for j:=1 to 10 do write(sa1[j]:4);

writeln;

writeln(‘Length(sa1) = ‘,Length(sa1)); writeln(‘SizeOf(sa1) = ‘,SizeOf(sa1)); writeln(‘Length(da1) = ‘,Length(da1)); writeln(‘SizeOf(da1) = ‘,SizeOf(da1)); SetLength(da1,5);

for j:=0 to 4 do begin

write(da1[j]:4); da1[j]:=j;

end;

writeln; SetLength(da1,10); for j:=0 to 9 do

write(da1[j]:4);

writeln;

writeln(‘Length(da1) = ‘,Length(da1)); writeln(‘SizeOf(da1) = ‘,SizeOf(da1)); readln;

end.

Рис. 6.4. Результаты работы программы matrix_4

Программа matrix_5 демонстрирует тактику выделения памяти для локальных массивов — статического массива lsa и динамического массива lda (листинг 6.9). Локальному статическому массиву память выделяется в момент входа в подпро- грамму, но эта память не чистится. Локальному динамическому массиву поначалу выделяется 4 байта под указатель, но после обращения к процедуре SetLength вы- деляется чистая память.

   Листинг 6.9.  Программа  matrix_5                                             

program matrix_5; procedure qq;

var

lsa: array[1..5] of integer; lda: array of integer;

j: integer; begin

writeln(‘SizeOf(lsa)=’,SizeOf(lsa)); writeln(‘Length(lsa)=’,Length(lsa)); writeln(‘SizeOf(lda)=’,SizeOf(lda)); writeln(‘Length(lda)=’,Length(lda)); for j:=1 to 5 do

write(lsa[j],’ ‘); writeln; SetLength(lda,5);

writeln(‘SizeOf(lda)=’,SizeOf(lda)); writeln(‘Length(lda)=’,Length(lda)); for j:=0 to 4 do

write(lda[j]:4,’ ‘); writeln;

end; begin

qq; readln;

end.

Рис. 6.5. Результаты работы программы  matrix_5

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии