Студопедия

Главная страница Случайная страница

Разделы сайта

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






Дәріс 12. Көрсеткіштік тип. Динамикалық айнымалылар






Мә ліметтер сегменті деп аталатын бағ дарламада кө рсетілген барлық айнымалылар оперативті жадының бір ү зіліссіз облысында орналасады. Мә ліметтер сегментінің ұ зындығ ы 80*86 микропроцессор архитектурасымен анық талып, 65536 байт қ ү райды, бұ л ү лкен массивті мә ліметтерді ө ң деген кезде белгілі қ иындық тарды тудыруы мү мкін. Басқ а жағ ынан д.к жадының кө лемі (жалпы 640 кб - тан кем емес) ү лкен ө лшемді мә ліметтен тү ратын есептерді қ олайлы шешу ү шін жеткілікті. Қ иын жағ дайдан шығ у ү шін динамикалық жады деп аталатынды қ олдану керек.

Динамикалык жады - бұ л мә ліметтер сегментін (64 кб) стекті (16 кб) жә не бағ дарлама денесін алып тастағ ан жұ мысы кезінде бағ дарламағ а ұ сынылатын д.к оперативті жадысы. Динамикалық жадының ө лшемін кең шектерде вариациалауғ а болады. Ү нсіз келісім бойынша бұ л ө лшем д.к - дің қ атынауғ а болатын барлық жадымен анық талып, кө біне, 200...3000 кб қ ұ райды.

Динамикалық жады - бұ л мә ліметтердің ү лкен ө лшемді массивтерін ө ң деудің фактылы тү рдегі жалғ ыз ғ ана мү мкіндігі. Кө птеген практикалық есептерді динамикалық жадты қ олданбай шешу қ иын немесе мү мкін емес. Мұ ндай қ ажеттілік, мысалғ а, автоматталғ ан проекциялау жү йесін (АПЖ) ө ң деу кезінде туады. АПЖ-да қ олданылатын математикалық модульдер ө лшемділігі ә р тү рлі проектерде болуы мү мкін; бұ л жағ дайда жадты статикалық (яғ ни АПЖ ө ң деу этапында) бө лу, ереже бойынша мү мкін емес. Сонымен динамикалық жад д.к - дің графикалық жә не дыбыстық қ ұ ралдарымен жү мыс істеген кезде уақ ытша есте сақ тау ү шін кең қ олданылады.

Мә ліметтерді динамикалық орналастыру, бағ дарламамен жұ мыс кезінде тікелей динамикалық жадты қ олданғ анды білдіреді. Бұ ғ ан қ арағ анда сатикалық орналастыру бағ дарлама компиляциясы процесінде Т.П компляторымен іске асады. Динамикалык орналастыру кезінде алдын - ала орналастырылатын мә ліметтердің саны да, типі де белгісіз, оларғ а статикалық айнымалыларғ а сияқ ты аты бойынша шақ ыруғ а болмайды.

Кө рсеткіштер

Динамикалық айнымалыларды қ олдану олардың жадыдағ ы мекенжайына байланысты болады. Динамикалық айнымалыны сақ тау ү шін сілтеу тү рі қ олданылады, ал сілтеу тү ріндегі айнымалыны кө рсеткіш деп атайды.

Кө рсеткіштер - бү тін типті болып табылады, ол мә ліметтердің белгілі бір элементін қ ұ рамына енгізетін жадтың байт адресі ретінде интерпритацияланады. Бү л элемент ретінде, айнымалының адресі, жә не т, б болуы мү мкін. Ә детте белгілі бір программамен жұ мыс істегенде, сіз жады да айнымалы мен константаның қ айда орналасқ анына назар аудармайсыз. Сіз оларғ а берілген аттары бойынша қ атынаса аламыз (яғ ни идентификаторы арқ ылы), бү л жағ дайда Т.П осы айнымалылармен константаларды қ айдан іздеу керектігін дә л біледі. Айталық, сіздің программаң ыздың хабарландыру мен келісім бө лімінің қ ұ рамында мына сө йлем бар.

Var Number: integer;

Берілген сө йлем арқ ылы сіз комплияторғ а Number сө зімен сілтеме жасайтын жады облысының резервтеу керектігін кө рсетесіз.

Number айнымалысы орналасқ ан адрес жадыда @ операторы арқ ылы анық тауғ а болады: Pl: -@Number; немесе Addr функциясы арқ ылы. Нә тижесінде, Pl: =@Number; операциясын орындау нә тижесінде Р1 айнымалысына Number айнымалысының мә ні жазылады.

Дербес компьютердегі жады екі, он алтылық сө здермен (ВА: BS) адрестеледі. Бұ л сө здер ығ ыстыру сегменттік адрес жә не (ВА) жә не ығ ыстыру (BS) болып табылады. Сегмент - бұ л ұ зындығ ы 64 кб болатын жадының бө лігі, физикалық адрестен басталады, оның мә ні 16 санына бө лінеді. Ығ ыстыру - сегментке байт нө мерін анық тайтын сан жиі програманы жазу кезінде сілтемелерді қ олданылып кетпеу жағ дайы кездеседі. Тө менде осындай жағ дайлардың бірнешеуі карастырылғ ан.

Сіздің бағ дарламаң ыз мә ліметтердің ү лкен кө лемімен жұ мыс істеу керек (жалпы кө лемі 64 кв - тан асатын)

Ескерту: Жалпы айтқ анда ТР 7.0 кез - келген сегменті сияқ ты мә ліметтер сегментінің кө лемі 64 кб - тан аса алмайды.

Тө менде кө рсетілген мысалды компиляциялағ анда қ ате туралы хабар шығ ады -Out of memory (жады шегінен тыс шығ у). Берілген қ ате жағ дай орынды, ө йткені Demo -MEM модулінде st айнымалы хабарландырылады, ол ө з жұ мысы ү шін максимальды мү мкін ө лшемінен мә ліметтер сегментінің алатын жады кө лемін сү райды. UNIT Demo MEM;

INTERFACE

VAR BUFFER: ARRAY(1..$FFFO) OF CHAR;

............................

IMPLEMENTATION

BEGIN

END;

...............................

USES ST: STRING;

..............

BEGIN

END.

 

Сілтемелерді қ олдану сипатталғ ан мә селелерді шешуге мү мкіндік береді, ө йткені сіздің программаң ыз динамикалық бө лінетін облыста программаның қ алыпты жұ мысы ү шін қ ажетті жады кө лемін бө леді, жә не бү л жағ дайды сілтемені мә ліметтер сақ таулы адреске сілтеу тү рінде ұ стайды.

Жадының динамикалық бө лінетін облысы - бұ л программа денесі, мә ліметтер сегменті мен ағ ымының алатын жадыдағ ы орнын алып тастағ анда қ алатын компьютердің оперативті кө лемі.

Кө рсеткіштер типтік немесе типсіз болады. Кө рсеткіштер жадта екілік сө зге болады, онда сегмент жә не ығ ысу сақ талады.

Компьютердің жады статика жә не динамика ретінде қ ұ рылғ ан. Компьютердің оперативты жадында шектелген мә ліметтердің санын орналастыруғ а болады. Var бө лімінде сипатталғ ан айнымалыларғ а жү йе жадтың шектелген кө лемін қ алдырады, барлығ ы программада қ олданбасада. Бірақ, кейбір есепте айнымалылардың саны алдын ала белгісіз. Осы кезде динамикалық жадты пайдаланады. Осындай айнымалылар динамикалық деп аталады. Олармен жұ мыс істеу ү шін кө рсеткіш тү рі қ олданылады. Егер статика айнымалынын аты оперативті жадта онын адресін анық таса, кө рсеткіш динамикалық айнымалынын тек қ ана тү рін анық тайды. Кө рсеткіш тү рі ^ таң бамен type бө лімінде сипатталады:

Type < тү рдін атауы> =^< негізгі тү р>;

Динамикалық айнымалылардың тұ рақ ты кө рсеткіштері var бө лімінде сипатталады:

Var < айнымалыларғ а кө рсеткіштердін тізімі>: < тү р атауы>;

Мысалы, Type UkazNaCeloe=^integer;

UkazNaMassiv=^array[1..100] of real;

UkazNaZapis=^Zapis;

Var c1, c2: UkazNaCeloe;

mas1, mas2: UkazNaMassiv;

zap1, zap2: UkazNaZapis;

Компиляциянын осы қ адамында тізбектерге жә не жазуларғ а жадта орын қ алдырылмайды, кө рсеткіш ө зі 4 байт орын алады.

ТР 7.0 -де жадының динамикалық бө лінетін облыспен жү мыс істеудің 2 жолы бар.

- New жә не Dispoce

- GetMEM жә не Free MEM процедуралары арқ ылы.

Барлық динамикалық бө лінетін жады байттардан тұ ратын жә не ү йінді деп аталатын тұ тас массивтен тұ рады (Heap - облысы). Heap облысында программа денесі орын алатын жады облысынан кейін орналасады. Heap облысының тө менгі шегі Heap - Org стандартты айнымалы - сілтемесі бар абсалютті адреске ие. Heap облысының жоғ арғ ы шегі Heap End сілтемемен анық талады. Heap облысының бос жә не бос емес бө лігін ажыратып тұ ратын сілтеменің ағ ымдық мә ні Heap Ptr сілтемесіне ие. Жадыны жаң адан бө лген кезде Heap облысты басқ аратын жү йе Heap Ptr сілтемесін жоғ арығ а

жылжытады, бұ л стекте мә нді сақ тауғ а ұ қ сас болады. Динаммикалық жадыда айнымалыларды босатқ ан кезде кері ә рекет болады - яғ ни Heap Ptr сілтемесі тө менге жылжыйды. (жадының адрестерінің тө мендеу жағ ына қ арай). Динамикалық жадымен жұ мыс істеген кезде Heap облысынан басқ а Dos адрестерінің ең тө менгі жағ ында орналасқ ан жадының бір аумағ ы бө лінеді. Оның тө менгі шекарасының адресі Free Ptr айнымалы сілтемеде сақ таулы. Бұ л аумақ тың қ ұ рамында ү йіндіде бос жадының тіркеуші жазбалар тізбесі бар. Оның кө мегімен динамикалық жадыны бө луді толық басқ ару ө теді. Бұ л тізімнің ә рбір жазбасы жадыда ә рбір сә йкес динамикалық айнымалыны орналастыру туралы ақ паратқ а ие.

Айтып кеткендей, динамикалық бө лінетін жадының кө лемін біз комплятор директивасы ($М) арқ ылы басқ ара аламыз, жә не Heap облысының миниальді ө лшемі ү нсіз келісім бойынша нольге тең, ал максимальды ө лшемі - барлық бос DOS жадысында. Heap облысын анық тағ аннан кейін орын алынғ ан кең істіктің жазбалар тізімі бос адрестерден бастап жоғ арыдан тө менге қ арай ө седі, ал динамикалық жады Heap- Org сілтемесінен бастап тө меннен жоғ ары қ арай.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.