Студопедия

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

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

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






Вказівники типу far






З метою економії пам'яті у вказівниках, які використовуються в ОС з сегментованою пам'яттю зберігається лише зміщення відносно по­чат­ку даного сегменту. Такий тип вказівника називається близьким і є ти­пом по замовчуванні, або оголошується шляхом використання заре­зер­вованого слова 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. Використання далекого вказівника можливе (помилку виправить компілятор), але не виправдане.

Адресація в глобальній купі може здійснюватись як через ближні так і через далекі вказівники (в окремих випадках при потребі компілятор самостійно може перевести вказівник з класу ближніх в клас далеких).






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