АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

ДИНАМІЧНА ПАМ’ЯТЬ. __________________________________________________________

Читайте также:
  1. A formula - formulae (formulas), a crisis - crises, a criterion - criteria, an index - indices, a bacterium — bacteria, an axis — axes
  2. A radioactive disintegration. Kinds of radioactive radiation
  3. A) Listen to the recording of Text Five and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  4. A) Listen to the recording of Text Four and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  5. A) Listen to the recording of Text One and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  6. A) Listen to the recording of Text Six and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  7. A) Listen to the recording of Text Two and mark the stresses and tunes, b) Repeat the text in the intervals after the model.
  8. A) Make a round-table talk on the state of film-making in this country. Be ready to make suggestions about the possible improvements in film-making.
  9. A) Read the following extract from an essay by V. Belinsky and summarize it in English.
  10. A) Read the following text dealing with comprehension of literature on school level.
  11. A) Read the following text to figure out the author's approach to foreign-lan- guage teaching. Do you think there is such a problem?
  12. A) Travelling and holiday-making are in a way related to each other. Read the following dialogue for enlarging your topical vocabulary (A — student of English; В — teacher).

Під час розподілу пам’яті під локальні змінні відводиться спеціальний сегмент оперативної пам’яті (сегмент стека).

Сегмент - це ділянка пам'яті розміром 64 Кбайт. Для динамічних об’єктів вводиться інша область пам’яті, яка називається купою, або динамічною областю пам’яті.

У випадку використання процедури new можливе переповнення динамічної пам’яті. В цьому випадку програма не припинить своє виконання, але значення вказівної змінної, яка є параметром процедури new не зміниться, що може привести до неправильних результатів.

Тому в Турбо Паскалі передбачена стандартна функція MaxAvail без параметрів, яка повертає в програму максимальний розмір в байтах неперервного відрізка вільної пам’яті, що використовується для розміщення динамічних змінних.

Приклад:

:

var

pl : ^ longint ;

begin

if MaxAvail>=4 then new(pl) else

writeln(‘динамічна пам’ять вичерпана’);

Цей фрагмент означає, що для розміщення змінної типу longint потрібно 4 байта. Якщо розмір динамічної змінної >=4 байта, то для змінної виділяється пам’ять.

В загальному випадку для визначення розміру динамічної пам’яті використовують стандартну функцію SizeOf. Її результат – кількість байтів, необхідна для зберігання даної змінної чи змінних даного типу. Цю функцію зручно використовувати для складних типів.

Крім цього в Турбо Паскалі є функція MemAvail, яка повертає сумарний розмір всіх вільних областей динамічної пам’яті. В загальному випадку ці функції дають різні результати. Довільний характер відведення і вивільнення динамічної пам’яті приводить до того, що куча може являти собою випадкову послідовність вільних і зайнятих областей різних розмірів . Функція MaxAvail визначає найбільшу вільну пам’ять, функція MemAvail - загальний об’єм вільних областей.

Приклад.

Program vkaz ;

{1} var

c1 , c2 : ^ integer; {оголошуємо два вказівники}

begin

{2} new(c1); {резервуємо пам’ять для цілого числа}

new(c2); {резервуємо пам’ять для цілого числа}

{3} c1^ :=5; {змінна c1^ отримує значення 5}

c2^ :=7; {змінна c1^ отримує значення 7}

writeln (c1^,c2^); {виводимо 5 і 7}

{4} c1 :=c2; {переадресація}

writeln (c1^,c2^); {виводимо 7 і 7}



{5} c2 :=nil; {вказівник с2 занулюємо}

{6} dispose(c2); {пам’ять , надану для с2, вивільняємо}

writeln(c1^); {виводимо 7}

end.

 


Приклад.

Наведемо програму, що призначена для демонстрації принципів використання операцій над вказівниками. Зазначимо, що вказівники не можна використовува­ти як аргументи підпрограм. Із цього, зокрема, випливає висновок про неможли­вість надрукувати значення вказівника за допомогою стандартних процедур write і writeln. Спроба зробити це призведе до появи помилки Error 64: Cannot Read or Write variables of this type (He можна вводити або виводити змінні даного типу.). Тому значення вказівників, використані в програмі, можна переглядати лише під час налагодження програми у вікні Watch. Зв'язок між вказівником і динамічною змінною, на яку він посилається, проілюстрований на рисунку 1. Ре­зультати роботи програми зображено на рисунку 2.

program ex_1;

uses crt;

Type

vector = array [1..5] of integer;

typefile = file of integer;

IdentPtr = ^IdentRec;

IdentRec = record

Ident: string[15];

Next: IdentPtr;

end;

var pbyte : ^Byte;

pint1.pint2 : ^integer;

parray : ^vector;

pfile : ^typefile;

untyped : pointer;

prec : IdentPtr;

x : byte;

у : integer;

arr : vector;

f : file of integer;

list : IdentRec;

Begin

clrscr:

У := 1;

Pint1 := @y;

У := 2:

pint2 := @y; {вказівник pint1 та pint2 посилаються на ту саму змінну - у }

write('pint1 and pint2 are the same: ');

writeln('(pint1=pint2)=’,pint1=pint2); {порівняння вказівників}

writeln('pint1^=',pint1^,' pint2*=',pint2*,' y=',y);

pbyte := @x;

untyped := pbyte; {використання не типізованого}

pint1 := untyped; {вказівника, pint1 та pbyte }

x := 4; {посилаються на одну й ту саму змінну}

writeln('pbyte^=',pbyte^,' pint1^=',pint1^,' x=',x);

{використання вказівників для посилання на елементи масивів та записів}

‡агрузка...

parray := @arr;

parray^[1] := 1:

prec := @list:

prec^.Ident := 'Pointers !!!';

writeln('arr[1]=',arr[1],' parray^[1]=',parray^[1]);

write(‘ list. Ident=’,list. Ident);

write(‘ prec^.Ident=' ,prec^,Ident);

{використання вказівника на файлову змінну}

Assign(f,'newfile.txt');

pfile:=@f;

rewrite(f);

write(pfile^,y); {до файлу 'newfile.txt' буде записано}

close(pfile^); {значення змінної у}

readln;

end.


1 | 2 | 3 |


При использовании материала, поставите ссылку на Студалл.Орг (0.011 сек.)