|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Seg(x):word
Ofs(x):word x - ідентифікатор змінної, процедури чи функції. Ці функції повертають: seg - адресу сегменту об'єкту x ofs - адресу зміщення об'єкту x 5) dseg:word; - функція повертає адресу сегменту даних (вміст регістру ds) cseg:word; - адресу сегменту коду (регістр cs) sseg:word; - адресу сегменту стеку (регістр ss).
Порівняння показівників(=, <>) Два показівники є рівними тільки у тому випадку, коли вони посилаються на той самий об'єкт - динамічну змінну. Використовувати обережно, оскільки не всі процедури нормалізують значення <сегмент>:<зміщення>. Визволення динамічної змінної Надання показівнику значення NIL розриває зв'язок між змінною та показівником, але не знищує самої змінної у динамічній пам'яті. Місце, яке вона займає, залишається зарезервованим і не може бути використано іншими динамічними змінними. DISPOSE(var p:pointer); - процедура знищує динамічну змінну, на яку посилається показівник p, та повертає пам'ять, що вона займала, до динамічної нерозподіленої пам'яті. Значення показівника р стає невизначеним. Слідкувати за звільненням динамічних змінних слід самостійно. Утворювати та визволяти динамічні змінні можна також за допомогою іншої пари процедур: getmem ~ freemem Але якщо у процедурах NEW - DISPOSE об'єм пам'яті, що виділяється під динамічну змінну, визначається базовим типом показівника, то у процедурах getmem та freemem він визначається безпосередньо, за допомогою додаткового параметра. getmem(var p:pointer;size:word); - утворює динамічну змінну розміром size freemem(var p:pointer,size:word); - звільнює динамічну змінну розміром size. Параметр size повинен дорівнювати відповідному параметру у процедурі getmem.
Блочне визволення пам'яті Існують дві зв'язані між собою процедури, одна з яких фіксує поточний стан динамічної пам'яті (наприклад, перед викликом блоку процедури або функції), а інша відновлює цей стан (наприклад, після його виконання, звільнюючи всі динамічні змінні, які за цей час були утворені). mark(var p:pointer); - записує поточний стан heap-області у змінну p (фактично записується heaptr) release(var p:pointer); - повертає динамічну область до попереднього стану через показівник p (тобто heapptr надається значення p) Процедура release(heaporg); звільняє всю динамічно розподілену пам'ять.
Таким чином, існує декілька засобів утворення та знищення динамічної змінної: NEW/DISPOSE NEW/MARK/RELEASE Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |