русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Функция обработки ошибки динамически распределяемой области памяти


Дата добавления: 2015-07-23; просмотров: 609; Нарушение авторских прав


Реализовать функцию обработки ошибки динамически распределяемой области можно с помощью переменной HeapError. Эта функция вызывается каждый раз, когда программа динамического распределения памяти не может выполнить запрос на выделение памяти. HeapError является указателем, который ссылается на функцию со следующим заголовком:

{$F+} function HeapFunc(Size: word): integer; {$F-}

Функция обработки ошибки динамически распределяемой области реализуется путем присвоения ее адреса переменной HeapError:

HeapError := @HeapFunc;

Функция обработки ошибки динамически распределяемой области получает управление, когда при обращении к процедурам New и GetMem запрос не может быть выполнен. Параметр Size содержит размер блока, для которого не оказалось области памяти соответствующего размера, и функция обработки ошибки произведет попытку освобождения блока, размер которого не меньше данного размера.

В зависимости от успеха выполнения этой попытки функция обработки ошибки динамически распределяемой области возвращает значения 0, 1 или 2. Возвращаемое значение 0 свидетельствует о неудачной попытке, что немедленно приводит к возникновению ошибки во время выполнения программы. Возвращаемое значение 1 также свидетельствует о неудачной попытке, но вместо ошибки во время выполнения оно приводит к тому, что процедуры New и GetMem возвращают указатель nil. Возвращаемое значение 2 свидетельствует об удачной попытке и вызывает повторную попытку выделить память.

Стандартная функция обработки ошибки динамического распределения области всегда возвращает значение 0, приводя к ошибке всякий раз, когда не могут быть выполнены процедуры New или GetMem. Однако для многих прикладных задач более подходящей является простая функция обработки ошибки динамически распределяемой области:

{$F+} function HeapFunc(Size:word): integer; {$F-}



begin

HeapFunc := 1;

end;

Если такая функция реализована, то вместо принудительного завершения работы программы в ситуации, когда процедуры New GetMem не могут выполнить запрос, она будет возвращать пустой указатель (nil).

14. Использование языка ассемблера в программах на Turbo Pascal

Turbo Pascal позволяет писать отдельные части программы (подпрограммы или части подпрограмм) на языке ассемблера. Здесь возможны четыре варианта.

Во-первых, можно написать подпрограмму на языке ассемблера, скомпилировать ее отдельно компилятором TASM (Turbo Assembler) с получением объектного файла, а затем скомпоновать его с основной программой, написанной на Turbo Pascal, используя при этом директиву компилятора {$L <имя файла>}, где <имя файла> - имя файла с подпрограммой на ассемблере, и директиву external.

Во-вторых, используя встроенный ассемблер пакета Turbo Pascal, отдельные части текста программы можно написать непосредственно на языке ассемблера, заключив их в операторные скобки asm … end.

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

Наконец, в-четвертых, можно небольшую подпрограмму написать непосредственно в кодах процессора, используя оператор или директиву inline.

При написании отдельных частей программы на языке ассемблера следует иметь в виду, что необходимо сохранить содержимое регистров BP, SP, SS и DS. Еслиих необходимо изменить, то исходные значения следует запомнить, а затем восстановить. Остальные регистры можно безболезненно изменять.

Основным вопросом стыковки программы с подпрограммой, написанной на ассемблере, является передача параметров в подпрограмму и обратно.



<== предыдущая лекция | следующая лекция ==>
Список свободных блоков | Использование компилятора TASM


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.61 сек.