Студопедия — Выделение и освобождение динамической памяти
Студопедия Главная Случайная страница Обратная связь

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

Выделение и освобождение динамической памяти






Вся динамическая память в Турбо Паскале рассматривается как сплошной массив байтов, который называется кучей. Физически куча располагается в старших адресах сразу за областью памяти, которую занимает тело программы.

Начало кучи хранится в стандартной переменной HEAPORG, конец - в переменной HEAPEND. Текущую границу незанятой динамической памяти указывает указатель HEAPPTR.

Расположение кучи в памяти ПК

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

Var

i, j: ^integer;

r: ^real;

Begin

New(i);

.....

end.

Таким образом, значение, на которое указывает указатель, т.е. собственно данные, размещенные в куче, обозначаются значком ^, который ставится сразу за указателем. Если за указателем нет значка ^, то имеется виду адрес, по которому размещены данные.

Динамически размещенные данные можно использовать в любом месте программы, где это допустимо для констант и переменных соответствующего типа, например:

r^:= sqr(r^) + i^ - 17;

Динамическую память можно не только забирать из кучи, но и возвращать обратно. Для этого используется процедура DISPOSE. Например, операторы

dispose(r); вернут в кучу 8 байт, которые ранее были выделены указателям R.
Отметим, что процедура DISPOSE(PTR) не изменяет значения указателя PTR, а лишь возвращает в кучу память, ранее связанную с этим указателем. Однако повторное применение процедуры к свободному указателю приведет к возникновению ошибки периода исполнения. Освободившийся указатель программист может пометить зарезервированным словом NIL.

Как уже отмечалось, параметром процедуры NEW может быть только типизированный указатель. Для работы с нетипизированными указателями используются процедуры:

GETMEM (P, SIZE) - резервирование памяти;
FREEMEM(P, SIZE) - освобождение памяти.

Здесь

Р -- нетипизированный указатель;
SIZE -- размер в байтах требуемой или освобождаемой части кучи.

За одно обращение к куче процедурой GETMEM можно зарезервировать до 65521 байта динамической памяти.
Использование процедур GETMEM--FREEMEM, как и вообще вся работа с динамической памятью, требует особой осторожности и тщательного соблюдения простого правила: освобождать нужно ровно столько памяти, сколько ее было зарезервировано, и именно с того адреса, с которого она была зарезервирована.
Нетрудно обнаружить, что наличие нетипизированных указателей открывает широкие возможности неявного преобразования типов.

 

6. Типы данных (целые и вещественные числа). Размер используемой памяти, пределы изменения и точность представляемых данных.

Тип данных — фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.

Чтобы ЭВМ могла при выполнении операций распознавать принадлежность конфигураций к тому или иному типу данных, необходимо при разработке алгоритмов, и особенно программ, прямо указывать эту принадлежность. Достигается это путем явного описания типов используемых данных. В зависимости от типа, заданного в описании переменной, она может принимать текущие значения только указанного типа.

ЦЕЛЫЕ типы определяют константы, переменные и функции, значения которых реализуются множеством целых чисел, допустимых в данной ЭВМ.

Целое число – это число, не имеющее запятой

тип диапазон значений требуемая память

________________________________________________________

 

Shortint -128.. 127 1 байт

 

Integer -32768.. 32767 2 байта

 

Longint -2147483648.. 2147483647 4 байта

 

Byte 0.. 255 1 байт

 

Word 0.. 65535 2 байта

Над целыми операндами можно выполнять следующие арифметические операции: сложение, вычитание, умножение, деление, получение остатка от деления.

Вещественные числа – это числа с запятой, после которой идут десятичные значения. Еще говорят, что они имеют плавающую точку. Компьютер воспринимает вещественное число, как два целых, и делает двойную работу при обработке чисел до запятой, и после нее.

Вещественные типы данных
Тип Диапазон возможных значений Значащих цифр максимально Размер в байтах
Real48 2.9 * 10-39.. 1.7 * 1038 11-12  
Real 5.0 * 10-324.. 1.7 * 10308 15-16  
Single 1.5 * 10-45.. 3.4 * 1038 7-8  
Double 5.0 * 10-324.. 1.7 * 10308 15-16  
Extended 3.6 * 10-4951.. 1.1 * 104932 19-20  
Comp -263+1.. 263-1 19-20  

 

 

7. Приоритеты выполнения операций при вычислении значений арифметических и логических выражений.

Выражение это формальное правило для вычисления некоторого значения. Выражение строится как совокупность операций, выполнение которых приводит к вычислению значения выражения. Главное свойство выражений - возможность иметь значение.

В зависимости от типа значения выражения можно разделить на три вида:

· численные (арифметические);

· логические;

· символьные.

Рассмотри правила построения выражений каждого из этих видов.

Численные (арифметические) выражения

Представляют собой совокупность имен переменных, констант, функций, а также других выражений числовых типов, объединенных знаками арифметических операций. В Паскале предусмотрены шесть арифметических операций:

+ сложение (унарный плюс)
- вычитание (унарный минус)
* умножение
/ деление
div целочисленное деление
mod остаток от целочисленного деления

Операция возведения в степень в языке не предусмотрена.

В сложных выражениях порядок выполнения операций определяется правилами приоритета:

1. унарная операция not, унарный минус -, взятие адреса @

2. операции типа умножения * / div mod and shl shr

3. операции типа сложения + - or xor

4. операции отношения = <> < > <= >= in {}

Для изменения порядка выполнения операций используют круглые скобки ().







Дата добавления: 2015-04-19; просмотров: 581. Нарушение авторских прав; Мы поможем в написании вашей работы!



Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Ганглиоблокаторы. Классификация. Механизм действия. Фармакодинамика. Применение.Побочные эфффекты Никотинчувствительные холинорецепторы (н-холинорецепторы) в основном локализованы на постсинаптических мембранах в синапсах скелетной мускулатуры...

Шов первичный, первично отсроченный, вторичный (показания) В зависимости от времени и условий наложения выделяют швы: 1) первичные...

Предпосылки, условия и движущие силы психического развития Предпосылки –это факторы. Факторы психического развития –это ведущие детерминанты развития чел. К ним относят: среду...

Билиодигестивные анастомозы Показания для наложения билиодигестивных анастомозов: 1. нарушения проходимости терминального отдела холедоха при доброкачественной патологии (стенозы и стриктуры холедоха) 2. опухоли большого дуоденального сосочка...

Сосудистый шов (ручной Карреля, механический шов). Операции при ранениях крупных сосудов 1912 г., Каррель – впервые предложил методику сосудистого шва. Сосудистый шов применяется для восстановления магистрального кровотока при лечении...

Трамадол (Маброн, Плазадол, Трамал, Трамалин) Групповая принадлежность · Наркотический анальгетик со смешанным механизмом действия, агонист опиоидных рецепторов...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия