КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Лекция 23: Динамическая память и указатели
Догель, 1947 г. «Паразиты – это такие организмы, которые используют другие организмы в качестве источника пищи и среды обитания, возлагая при этом частично или полностью на своих хозяев задачу регуляции своих взаимоотношений с окружающей средой». Среда обитания паразита – другой организм – хозяин. Организм хозяина имеет собственный гомеостаз, защитные механизмы от всего инородного. Паразит – чужеродный организм. В процессе эволюции у паразита выработались приспособления для существования в живом организме, но хозяин также приспособился к паразиту. В процессе эволюции происходит соревнование. Паразиты – процветающие виды, имеющие биологический прогресс. Они очень изменчивы, пластичны. Паразиты – очень древние виды. Паразитизм существует с момента зарождения жизни (например, бактериофаги). У паразитов много упрощений (нет многих ферментов, пищеварительной трубки, у плоских червей пристеночное переваривание, как в тонком кишечнике). Поселяясь, в организме хозяина, они оказывают на него патогенное действие, зависящее от: - размеров; - морфологии; - физиологии; - интенсивности инвазии; - локализации в организме хозяина; - особенностей инвазии во время заражения. Инвазия – количество паразитов в теле одного хозяина. Болезни, вызываемые организмами животной природы – инвазионные. Болезни, вызываемые растительными и другими организмами – инфекционные. После поселения в организме хозяина паразит может воздействовать на его организм. Факторы действия паразитов: 1. Механический (механическое разрушение органов путем давления, внедрения, прикрепления). 2. Химический (отравление организма хозяина ядовитыми продуктами распада паразита после его смерти). 3. «Отнятие пищи» (непосредственное отнятие пищевых веществ и витаминов у хозяина). Например, лентец широкий отнимает витамин В12.
Когда паразит вступает в контакт с хозяином, постепенно формируется система паразит – хозяин. Наступает взаимная адаптация. Если не приспособятся, наступает гибель. В результате взаимодействия формируется энергетически сбалансированная система, пищи хозяина хватает для обоих. Иногда вес хозяина увеличивается. Паразит активно изменяет гомеостаз хозяина. Паразит стремится создать такие условия, которые будут для паразита оптимальными. У него есть вещества, изменяющие обмен веществ хозяина. Паразит выделяет биологически активные вещества, которые повышают обмен веществ хозяина, при этом продолжительность жизни хозяина снижается. Все паразиты делятся на 4 группы: - вирусные; - внутриклеточные; - кишечные; - тканевые. При вирусном паразитизме хозяин формирует фенотип паразита. При клеточном клетка увеличивается в размерах, защищает и питает паразита (например, лейшманиоз). При кишечном паразит получает все необходимые питательные вещества из кишечника. При тканевом паразитизме многие паразиты живут в жидких тканях (в свободном состоянии). Если они обитают в не жидких тканях, то подвергаются реакции со стороны соединительной ткани. Паразиты не рубцуются, он извращает гомеостаз хозяина, при этом формируется соединительнотканная капсула (а не рубец!). Капсула содержит большое количество сосудов, питающих паразита и уносящих продукты его метаболизма. Капсулы могут быть двойные (со стороны паразита и со стороны организма хозяина). Паразит чужероден, но БАВ, выделяемые паразитом подавляют рецепторы лейкоцитов и они не распознают его. Всегда ли паразитизм вреден? Если бы при паразитизме преимущество получал только паразит, тогда бы паразитизм исчез, но он процветает. 1855 г – 24 европейских кролика были ввезены в Австралию. Через 90 лет их уже было – миллионы. Пришлось ввести вирус миксоматоза. Сначала смертность среди кроликов составила 99,8%. Сейчас от того же вируса погибают лишь 5%, остальные «привыкли». Если природная приспособленность отсутствовала, кролики гибли, но с ними погибал и штамм со 100% вирулентностью. В природе не существует биологических видов, которые эволюционировали бы в одиночку. На поверхности тела, внутри тела – миллионы микроорганизмов. Все вместе они образуют единый микробиогеоценоз. Микроорганизмы, входящие в состав микробиогеоценоза защищают организм от чужеродных организмов. Из всех живых существ (около 1 млн.) около 50 000 – паразиты. Более 5000 видов – паразиты человека. 90 видов общие для человека и животных.
Тип Простейшие – 50 видов Тип Плоские черви – 9000 видов Тип Круглые черви – 100000 (в т.ч. паразиты растений) Тип Скребни – 500 видов Тип Кольчатые черви Тип Членистоногие
Все паразиты отличаются особой локализацией. Они делятся на: - эктопаразиты; - эндопаразиты. Эктопаразиты обитают на коже, в толще волосяного покрова. Эндопаразиты обитают внутри тела человека и животных и занимают там определенное место. Скребни обитают в тонком кишечнике, круглые черви – в разных органах. Некоторые паразиты, попадая в организм хозяина, оказываются в наиболее предпочтительном месте, другие часто мигрируют (аскариды). Во время миграций происходит массовая гибель паразитов и сильное повреждение организма хозяина. Все живые организмы расселяются- удаляются в разные стороны от места обитания родительских особей или центра популяции. Если не происходит расселение – наступает смертность. Вид обеспечивает себе выживание. У паразитов проблема – не переселять хозяина, поэтому они вынуждены покидать его, чтобы найти нового хозяина. На стадии покидания организма хозяина происходит и расселение. Смертность в этот период очень высока, поэтому паразиты очень плодовиты. Иногда имеет место партеногенез в личиночных стадиях (сосальщики). Наличие свободно живущей стадии создает для паразита дополнительные сложности – приспособление к условиям жизни внутри организма хозяина и вне его организма. Паразиты должны расселяться и переносить неблагоприятные условия, дожидаясь нового хозяина. В цикле жизни часто находится промежуточная стадия, когда паразит обитает в организме промежуточного хозяина и стадия покоя. Нормальный цикл жизни паразита предполагает многих хозяев. Окончательные / дефинитивные хозяева - хозяева, в теле которых происходит половым путем. Дополнительные / промежуточные хозяева – хозяева, в которых протекают промежуточные личиночные стадии. Резервуарный хозяин – хозяин, в котором паразиты длительно обитают, но не размножаются. Между паразитом и хозяином могут быть различные по времени контакты. Поэтому различают паразитов: - временных; - стационарных/постоянных. Временные связаны с хозяином только во время питания. Постоянные паразиты либо не покидают организм хозяина, либо длительно там живут. Паразиты могут вступить в контакт с разными видами хозяев, но некоторые виды более предпочитаемы, там паразит и хозяин формируют единую систему. Если паразиты живут у организмов только одного биологического вида – это моноксенные паразиты (вошь у человека). Если в жизненном цикле моноксеенных паразитов нет встречи с истинным хозяином, они заражают представителей других видов и гибнут. Если несколько видов хозяев – эвриксенные паразиты (кошачий сосальщик). В циркуляции многих паразитов принимают участие кровососущие организмы, часто наземные членистоногие. К настоящему времени установлены группы, к которым прикреплены паразиты. Роль переносчиков двояка. Членистоногие создают проход для возбудителя, нарушая целостность кожных покровов, но помимо этого, они сами вносят возбудителя внутрь. В более примитивном случае возбудитель не питается и не размножается в организме переносчика, тогда насекомые – механические переносчики (слепни для сибирской язвы). В других случаях паразит питается за счет переносчика и развивается в нем – специфические переносчики (муха цеце – трипаносомы). Заболевания, которые вызываются паразитами, передача которых осуществляется с участием переносчика, называются трансмиссивными. Облигатно трансмиссивные заболевания – такие трансмиссивные заболевания, которые передаются ТОЛЬКО при участии переносчика. Факультативно трансмиссивные заболевания – трансмиссивные заболевания, которые распространяются разными способами, в том числе с участием переносчиков. - клещевой возвратный тиф; - сыпной и возвратный тиф; - лихорадка паттачи; - сезонные энцефалиты и др.
Если возбудитель заражает животное, которое затем заражает человека или другое животное – зооноз. Если перенос осуществляется от человека к человеку – антропоноз. В природе количество паразитов и возбудителей поддерживается определенными условиями. Разработано учение о природной очаговости трансмиссивных заболеваний. Павловский (родился в 1898 году в Борисоглебске) был военным врачом и разработал учение о природной очаговости. Природный очаг – явление, когда переносчик, возбудитель и животное - резервуар в течение длительного времени существуют в природе независимо от человека. Природные очаги поддерживаются, если соблюдаются определенные условия. Если человек попадает в природный очаг, формируется синантропный очаг и человек заболевает. Для ликвидации природно-очаговых заболеваний проще всего уничтожить переносчика. 1975-1977г – Турция, близ Адена – вспышка малярии.
1. Статическая и динамическая память. 2. Управление динамической памятью. 3. Тип данных - Указатель. 4. Принципы работы с указателями. 1. Статическая и динамическая память. Все рассмотренные ранее типы данных (кроме типа file) представляли статические структуры. Память выделялась под переменные этих типов до выполнения программы, а размер выделяемой памяти определялся по описаниям соответствующих переменных (например, для переменной типа byte выделялся 1 байт оперативной памяти). Такая память является статической, поскольку её размер не может изменяться при выполнении программы. Статическая оперативная память в системе Турбо Паскаль выделяется программе отдельным сегментом, размер которого составляет 64 Кбайт. Статическая память освобождается при завершении программы. Такой принцип распределения оперативной памяти представляет серьёзные ограничения для программирования многих задач. Для ряда задач это ограничение столь серьёзно, что делает невозможным решение этих задач. Преодолеть недостатки статической памяти можно использованием динамической памяти. Динамическая память способна полностью использовать физический объём оперативной памяти, имеющийся на компьютере. Особенность динамической памяти состоит в том, что она выделяется и освобождается в процессе выполнения программы по запросам самой программы. Динамическая память часто используется в программах Турбо Паскаля, решающих задачи управления, проектирования, обучения, а также игровые задачи. Без неё практически не обходится ни одна прикладная программа на Турбо Паскале, поэтому работа с динамической памятью является важнейшей в арсенале средств прикладного программиста. 2. Управление динамической памятью. Для организации динамической памяти в Турбо Паскале предусмотрен специальный механизм, реализованный обслуживающей программой - менеджером динамической памяти. Вся динамическая память рассматривается менеджером как сплошной массив байтов, называемый хип-памятью (heap). Физическая хип-память размещается в старших адресах сразу за областью памяти, отводимой под тело программы. Рис. 3 иллюстрирует принцип организации хип-памяти:
® Направление возрастания адресов 0 ® max
HeapOrg HeapPtr HeapEnd
Рис. 3. Организация динамической памяти в Турбо Паскале. HeapOrg- начало хип-памяти, HeapPtr- текущая граница свободной хип-памяти, HeapEnd- конец хип-памяти.
Указатель границы занятой памяти HeapPtr отслеживает запросы программы на выделение динамической памяти под динамически размещаемые переменные и может сдвигаться вправо при каждом обслуженном запросе (величина сдвига зависит от типа динамически размещаемой переменной). На рис.3 левая штриховка хип-памяти соответствует занятой области памяти (по обслуженным запросам), а правая штриховка - незанятой (свободной) хип-памяти. Хип-память выделяется порциями, кратными 8 байтам. При освобождении хип-памяти она возвращается для последующего возможного выделения по очередным запросам. Менеджер хип-памяти ведёт учёт всех свободных фрагментов хип-памяти, организуя их в список свободных фрагментов, расположенных ниже границы HeapPtr. При запросе на выделение хип-памятиꗬÁIЙለ¿ကЀሢ橢橢뎲뎲Й鈰 3. Тип данных - Указатель. Для работы с динамической памятью в Турбо Паскале используется специальный тип данных - Указатель. Переменная типа Указатель имеет значением адрес оперативной памяти. Адрес приписан каждому байту оперативной памяти (от 0 до max) и состоит из двух частей: сегмента и смещения. Сегмент - непрерывный участок оперативной памяти длиной 64кбайт, начинающийся с физического адреса, кратного 16. Смещение указывает относительный адрес внутри сегмента. Как сегмент, так и смещение являются данными типа word. Таким образом, по своей внутренней структуре указатель состоит из двух слов типа word. С помощью указателя можно размещать в хип-памяти любой тип данных Турбо Паскаля (кроме файла). В случае, когда размещаемый тип данных имеет длину более 1 байта, указатель указывает на начало соответствующей структуры (на первый байт данных). В Турбо-Паскале имеется два вида указателей: типизированный указатель, указывающий на заданный тип данных; нетипизированный указатель, указывающий лишь на область памяти данных. Форма описания указателя зависит от вида указателя. Типизированный указатель описывается в следующей синтаксической форме: type <имя типа-указателя> = ^ <имя базового типа >; Здесь базовым типом может быть любой тип Турбо Паскаля, а символ ^, помещаемый перед базовым типом, идентифицирует тип-указатель. Например: type pint = ^integer; - тип-указатель на данные типа integer. Синтаксическая форма описания нетипизированного указателя имеет вид: type <имя типа-указателя> = pointer; Для работы с указателями, как и с любыми другими типами данных, объявляются переменные типа-указатель. Например: var pp:pint; { переменная типа pint (типизированный указатель)} np:pointer; {переменная нетипизированного указателя} Наиболее часто указатели используются для создания рекурсивных структур, характерным примером которых являются списки. Рекурсивной называется структура, описание которой содержит обращение к самой себе. Такие обращения в Турбо Паскале возможно реализовать только с помощью указателей. Например: type refer = ^ inf; inf = record name,adr,tel: string;next:refer end; Эта рекурсивная структура описывает линейный список, элементами которого являются записи, содержащие информацию о телефонах (три поля: имя, адрес и номер телефона) и указатель на следующую запись в списке. 4. Принципы работы с указателями. Переменная типа указатель, как мы установили выше, всегда является некоторым адресом оперативной памяти, идентифицирующим размещаемую в хип-памяти структуру данных. Создание указателя на структуру, по сути, является особым способом именования этой структуры, отличным от имён, принятых для статических переменных. Необходимо помнить, что обращаясь к указателю, мы обращаемся не непосредственно к структуре данных (не к её значению!), а лишь к адресу начала размещения этой структуры. В тех случаях, когда необходимо обратиться к значению представленной структуры данных, следует выполнить операцию разыменования, которая в Турбо Паскале имеет специальное обозначение: если p - указатель, то p^ - значение, на которое указывает p. (Обратите внимание, что символ ^ при разыменовании записывается после переменной-указателя, а не до него, как при описании типизированного указателя). Над указателями (т.е. адресами) допустимы операторы присваивания вида: p1:=p2; - где p1,p2 - только указатели одного и того же типа. p:= nil; - где р - переменная типа указатель, а nil - нулевой указатель (не являющийся ни одним из адресов хип-памяти), т.е. "нулевая" константа типа указатель. Для работы с указателями в Турбо Паскале предусмотрен ряд стандартных процедур и функций. Важнейшими из них являются процедуры выделения (резервирования) хип-памяти под структуры, на которые указывают указатели. Выделение хип-памяти под структуры, именуемые типизированными указателями, выполняет следующая процедура: new(< переменная типизированного указателя >); При выполнении этой процедуры менеджер выделяет хип-память для размещения структуры, на которую указывает параметр этой процедуры. Значением этого параметра становится адрес, на котором начинается указанная структура. Заметим, что непосредственно после выполнения new значение размещаемой структуры неопределенное - просто под структуру зарезервирована память. Для "наполнения" этой структуры каким-либо значением можно использовать присваивание разыменованному указателю. Для нетипизированных указателей память выделяется другой процедурой: getmem(<нетипизированный указатель>, < размер памяти >); где: <размер памяти> указывается в байтах. Действие процедуры getmem аналогично процедуре new, различие лишь в том, что размер структуры задаётся явно вторым параметром этой процедуры (для new он определялся неявно по описанию типа указателя). Заметим, что работа с нетипизированными указателями сложнее, т.к. всю ответственность за размещение структуры и её "наполнение" значением несёт только сам программист. В то же время этот вид указателей обладает большей гибкостью и способен размещать в одном и том же фрагменте памяти различные типы структур, создавая предпосылки для более эффективного использования памяти. Начинающим программистам не рекомендуется, тем не менее, работать с нетипизированными указателями. Оператор присваивания, процедуры выделения хип-памяти и разыменование переменной-указателя составляют основной арсенал средств работы с указателями. Кроме того, для указателей (как для адресов) допустимы обычные отношения сравнения: =, <>, <, >, <=, >=. Проиллюстрируем эти средства на примере - программе работы с линейным списком - списком телефонов: program list_tel;{создание списка телефонов} uses CRT; type refer=^info; {тип - Указатель на запись} info= record name,adr,tel: string; next:refer end; var first,p,pp:refer; {указатели на начало списка и текущие} s: string; procedure write_list(start:refer);{вывод всех элементов списка}
Дата добавления: 2014-01-07; Просмотров: 301; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |