Студопедия Главная Случайная страница Обратная связь

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

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





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

Начало кучи хранится в стандартной переменной 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; просмотров: 604. Нарушение авторских прав; Мы поможем в написании вашей работы!




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


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


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


Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Ситуация 26. ПРОВЕРЕНО МИНЗДРАВОМ   Станислав Свердлов закончил российско-американский факультет менеджмента Томского государственного университета...

Различия в философии античности, средневековья и Возрождения ♦Венцом античной философии было: Единое Благо, Мировой Ум, Мировая Душа, Космос...

Характерные черты немецкой классической философии 1. Особое понимание роли философии в истории человечества, в развитии мировой культуры. Классические немецкие философы полагали, что философия призвана быть критической совестью культуры, «душой» культуры. 2. Исследовались не только человеческая...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Гносеологический оптимизм, скептицизм, агностицизм.разновидности агностицизма Позицию Агностицизм защищает и критический реализм. Один из главных представителей этого направления...

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

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