![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
New (P);
где р - переменная типа «типизированный указатель». Эта процедура создает новую динамическую переменную (выделяет под нее участок памяти) и устанавливает на нее указатель P (в P записывается адрес выделенного участка памяти). Размер и структура выделяемого участка памяти задается размером памяти для того типа данных, с которым связан указатель P. Доступ к значению созданной переменной можно получить с помощью P^.
2. С помощью стандартной процедуры GetMem. GetMem (p, size); где P - переменная типа «указатель» требуемого типа. size - целочисленное выражение размера запрашиваемой памяти в байтах.
Эта процедура создает новую динамическую переменную требуемого размера и свойства, а также помещает адрес этой созданной переменной в переменную Р типа «указатель». Доступ к значению созданной переменной можно получить с помощью P^.
Динамическая память может быть освобождена четырьмя способами. 1. Автоматически по завершении всей программы. 2. С помощью стандартной процедуры dispose. Dispose (P); где P - переменная типа «указатель» (типизированный). В результате работы процедуры dispose(p) участок памяти, связанный с указателем P, помечается как свободный для возможных дальнейших размещений. При этом физической чистки указателя P и связанной с ними памяти нe происходит, поэтому, даже удалив этот экземпляр записи, можно все же получить значения ее полей, однако использовать это обстоятельство не рекомендуется.
Ввиду различия в способах реализации процедуру dispose не следует использовать совместно с процедурами mark и release. 3. С помощью стандартной процедуры frеемеm. FreeMem (P, size); где P - переменная типа «указатель», size - целочисленное выражение размера памяти в байтах для освобождения. Эта процедура помечает память размером, равным значению выражения size, связанную с указателем P, как свободную (см. пример для getmem). Например: Type Trec =record field1: string[30]; field2: integer; End; ptr_rec = ^ Trec; Var p: ptr_rec; Begin GetMem(р, sizeof (Trec)); { выделение памяти, адрес выделенного участка фиксируется в р; размер этой памяти в байтах определяет и возвращает стандартная функция sizeof, примененная к описанному типу данных; однако, зная размеры внутреннего представления используемых полей, можно было бы подсчитать размер памяти «вручную» и записать в виде константы вместо sizeof (Trec) } ... {использование памяти} ... FreeMem(p, sizeof(Trec)); {освобождение уже ненужной памяти} ... 4. С помощью стандартных процедур маrk и release. Mark (P);
|