Разделы презентаций


Pascal Указатели Динамические переменные

Для выделения памяти типизирован-ному указателю служит стандартная процедура new(): New (P); где P – имя указателя;[new можно исп. и в виде функции] Но для указателя типа Pointer

Слайды и текст этой презентации

Слайд 1

Вся динамическая память в Pascal это сплошной массив байтов (куча).
Адрес

начала кучи храниться в переменной HeapOrg, адрес конца в HeapEnd,

а текущую нижнюю границу свободной динамической памяти адресует указатель HeapPtr.

Создаваемые в этой памяти динамические переменные не имеют собственных имен – к ним обращаются через указатели.

При завершении программы используемая её динамическая память автоматически освобожда-ется, но программист может освободить её до окончания программы.

Динамические переменные

И+ПРГ

Вся динамическая память в Pascal это сплошной массив байтов (куча).Адрес начала кучи храниться в переменной HeapOrg, адрес

Слайд 2 Для выделения памяти типизирован-ному указателю служит стандартная процедура new():

New (P); где P – имя указателя;
[new

можно исп. и в виде функции]
Но для указателя типа Pointer исп.:
Getmem (P; Size);
где Size - к-во байт памяти.
За одно обращение к куче getmem может зарезервировать 65 521 байт памяти.

Для освобождения памяти, выделенной процедурой (функцией) new(), исп.:
Dispose (P);
От getmem освобождает память
Freemem (P; Size);
После освобождения памяти значение указателя становится неопределенным, поэтому во избежание проблем его лучше сразу же "обнулить":
dispose(p);
p:= nil;

Динамические переменные

И+ПРГ

Для выделения памяти типизирован-ному указателю служит стандартная процедура new(): New (P);    где P

Слайд 3Динамические переменные
Для освобождения памяти одновремен-но из-под нескольких переменных применяют процедуры:

Mark (P);
она вызывается до начала выделения памяти и записывает

в указатель P адрес начала динамической памяти (из переменной HeapOrg). Затем можно процедурой
Release (P);
освободить участок памяти занятый до момента вызова release, начиная с адреса записанного в mark.
Вспомогательные функции:
Maxavail – длина в байтах самого длинного свободного участка памяти
(тип функции longint),
Memavail – полный объем свободной динамической памяти в байтах
(тип функции longint),
Sizeof (X) – объем в байтах занимае-мый X, где X – либо имя переменной любого типа, либо имя типа
(тип функции word).

И+ПРГ

Динамические переменныеДля освобождения памяти одновремен-но из-под нескольких переменных применяют процедуры: Mark (P); она вызывается до начала выделения

Слайд 4Указатели на процедуры и функции
Указатели на подпрограмму являются переменной процедурного

(функциональ-ного) типа:
Имя функции (процедуры) – это константа процедурного типа, поэтому

присваивание происходит без операции взятия адреса @ , т.к. в этом типе имя подпрограммы - и есть адрес точки входа в неё.
type fun = function (x : real) : real;
var pf : fun;
(* конкретная функция *)
function f (x : real) : real : far;
Begin
……………………… (* тело функции *)
End;
pf := f;
В переменной pf теперь содержится адрес точки входа в функцию f, и можно вызывать её так: y := pf(x);
Функция должна компилироваться в режиме дальней адресации - far, ведь адрес должен содержать сегмент и смещение, а без far – одно смещение, т.к. компилятор формирует всего один сегмент кода.

И+ПРГ

Указатели на процедуры и функцииУказатели на подпрограмму являются переменной процедурного (функциональ-ного) типа:Имя функции (процедуры) – это константа

Слайд 5Примеры: Определите что делает программа
Program memo;
Type
mas_int = array

[1..maxint] of integer;
Var
p : ^mas_int;
i,

n : integer;
Begin
Writeln ('Введите размер массива:');
Readln (n);
If Maxavail < n * Sizeof (integer) then
Begin
writeln(' Недостаточно памяти');
halt; (*немедленно завершает выполнение программы *)
End;
Getmem (p, n * Sizeof (integer));
for I := 1 to n do
read (p^[i]);
End.

Эта программа вводит массив целых чисел, размер которого неизвестен на стадии компиляции, а запрашивается во время выполнения программы. Перед выделением памяти проверяется наличие свободного места.

И+ПРГ

Примеры: Определите что делает программаProgram memo;Type  mas_int = array [1..maxint] of integer;Var  p  :

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика