Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Вказівники типу far⇐ ПредыдущаяСтр 20 из 20
З метою економії пам'яті у вказівниках, які використовуються в ОС з сегментованою пам'яттю зберігається лише зміщення відносно початку даного сегменту. Такий тип вказівника називається близьким і є типом по замовчуванні, або оголошується шляхом використання зарезервованого слова near. Окрім near-вказівників С++ підтримує далекий тип вказівників (або вказівники типу far), який дає змогу зберігати повну інформацію про адресацію (сегмент+зміщення). Загальний синтаксис оголошення далеких вказівників має вигляд [const] type* far pointerName[=address]; Незалежно від типу на які посилаються вказівники для near-вказівників виділяється одна цілочисельна комірка пам’яті розміром два байти; для far-вказівників - дві комірки, тобто 4 байти. Основне призначення far-вказівників, це звертання до так званих далеких адрес - адрес, які можуть бути визначені лише явним зберігання пари сегмент+зміщення. 10. Вказівники і динамічні змінні (керування пам'яттю) Вказівники реалізовують багатоцільовий мехнізм. З одного боку вони використовуються для непрямої адресації існуючих змінних, які розміщені в області стеку (сегмент SS) чи в області даних (сегмент DS), і забезпечують тим альтернативний доступ до їх значень. З іншого - вказівники дозволять керувати розподілом динамічної пам’яті - купи (heap). Змінні, які розміщуються в купі, називаються динамчними. В переважній більшості вони є безіменними, а доступ до них забезпечується вказівниками чи посиланнями. Існує два види куп: - локальна (або ближня - local heap) купа. Це купа, яка формується в сегменті DS, - глобальна (або далека - global heap) купа. Це купа, яка формується з незайнятої прикладною програмою області адесного простору, яки виділений даній програмі. В різних моделях пам’яті програм [ ] - способах розміщення сегментів програми в оперативній пам’яті при її запуску - можуть бути різні співвідношення існування локальної та глобальної куп. Зокрема від повної відсутності куп (модель tiny) до існування лише глобальної (моделі flat чи huge). Адресація в локальній купі здійснюється лише за допомогою ближнього вказівника, оскільки адреса сегмента, в якому розміщена купа, зберігається в регістрі DS. Використання далекого вказівника можливе (помилку виправить компілятор), але не виправдане. Адресація в глобальній купі може здійснюватись як через ближні так і через далекі вказівники (в окремих випадках при потребі компілятор самостійно може перевести вказівник з класу ближніх в клас далеких).
|