рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Покажчики

Покажчики - раздел Образование, Числові типи P   Тип Покажчика Представляє Собою Адресу Комірки Пам'яті (У Пер...

 

Тип покажчика представляє собою адресу комірки пам'яті (у переважній більшості сучасних обчислювальних систем розмір комірки, мінімальної адресованої одиниці пам'яті, складає один байт). При програмуванні на низькому рівні, у машинних кодах, мовою Ассемблера та мовою C, що спеціально орієнтовані на системних програмістів, робота з адресами складає значну частину програмних кодів. При рішенні прикладних задач з використанням мов високого рівня найбільш часті випадки, коли програмісту можуть знадобитися покажчики, наступні:

1) При необхідності представити одну і ту ж саму область пам'яті, а отже, ті ж самі фізичні дані, як дані різної логічної структури. У цьому випадку в програмі вводяться два або більше покажчиків, що містять адресу однієї і тієї ж області пам'яті, але мають різний тип. Звертаючись до цієї області пам'яті за тим чи іншим покажчиком, програміст обробляє її вміст як дані того чи іншого типу.

2) При роботі з динамічними структурами даних. Пам'ять під такі структури виділяється в ході виконання програми, стандартні процедури/функції виділення пам'яті повертають адресу виділеної області пам'яті – покажчик на неї. До вмісту динамічно виділеної області пам'яті програміст може звертатися тільки через такий покажчик.

ФІЗИЧНА СТРУКТУРА ПОКАЖЧИКА. Фізичне представлення адреси істотно залежить від апаратної архітектури обчислювальної системи. Розглянемо як приклад структуру адреси для мікропроцесора і8086. Машинне слово цього процесора має розмір 16 двійкових розрядів. Якщо використовувати представлення адреси в одному слові, то можна адресувати 64 Кбайт пам'яті, що явно недостатньо для будь-якого серйозного програмного виробу. Тому адреса представляється у вигляді двох 16-розрядних слів – сегмента і зсуву. Сегментна частина адреси завантажується в один зі спеціальних сегментних регістрів (в і8086 таких регістрів 4). При звертанні за адресою задається ідентифікатор сегментного регістра і 16-бітний зсув, що і визначають повну адресу.

Порядок визначення повної фізичної (ефективної) адреси такий:

1). Сегментна частина адреси зсувається на 4 розряди вліво.

2). Розряди, що ліворуч звільнилися, заповнюються нулями.

3). До отриманого таким способом коду додається зсув.

Отримана ефективна адреса має розмір 20 двійкових розрядів, таким чином, вона дозволяє адресувати до 1 Мбайт пам'яті. На рис. 2.5 наведений приклад визначення повної фізичної адреси. Варто підкреслити, що фізична структура адреси принципово різна для різних апаратних архітектур. Так, наприклад, у мікропроцесорі і386 обидві компоненти адреси 32-розрядні; у процесорах сімейства S/390 адреса представляється у вигляді 31-розрядного зсуву в одному з 19 адресних просторів, у процесорі Power PC 620 одним 64-розрядним словом може адресуватися вся як оперативна, так і зовнішня пам'ять.

 

Сегмент

+

Зсув

=

Повна

фізична адреса

Рис. 2.5. Визначення повної фізичної адреси

 

Операційна система MS DOS була розроблена саме для процесора і8086 і використовує описану структуру адреси навіть тоді, коли виконується на більш вдосконалених процесорах. Однак, це сьогодні єдина операційна система, у середовищі якої програміст може працювати з адресами в реальній пам'яті і з фізичною структурою адреси.

Всі без винятку сучасні моделі процесорів апаратно виконують так звану динамічну трансляцію адреси і разом із сучасними операційними системами забезпечують роботу програм у віртуальній (уявній) пам'яті. Програма розробляється і виконується в деякій віртуальній пам'яті, адреси в якій лінійно змінюються від 0 до деякого максимального значення. Віртуальна адреса представляє собою число – номер комірки у віртуальному адресному просторі. Перетворення віртуальної адреси в реальну виконується апаратно при кожному звертанні за віртуальною адресою. Це перетворення виконується зовсім непомітно (прозоро) для програміста, тому в сучасних системах програміст фізичною структурою адреси може вважати структуру віртуальної адреси. Віртуальна ж адреса представляє собою ціле число без знака. У різних обчислювальних системах може розрізнятися розрядність цього числа. Більшість сучасних систем забезпечують 32-розрядну адресу, що дозволяє адресувати до 4 Гбайт пам'яті, але вже існують системи із 48 і навіть 64-розрядними адресами.

Представлення покажчиків у мовах програмування. У програмі, що написана мовою високого рівня, покажчики можуть бути типізованими і нетипізованими. При оголошенні типізованого покажчика визначається також тип об'єкта в пам'яті, адресованого цим покажчиком. Наприклад, оголошення в мові PASCAL: а в мові C:

Var

іpt : ^іnteger; іnt *іpt;

cpt : ^char; char *cpt;

означають, що змінна іpt представляє собою адресу області пам'яті, у якій зберігається ціле число, а cpt – адреса області пам'яті, у якій зберігається символ. Хоча фізична структура адреси не залежить від типу і значення даних, що зберігаються за цією адресою, компілятор вважає покажчики іpt та cpt такими, що мають різний тип, і в PASCAL оператор: cpt := іpt;

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

Таким чином, коли мова йде про типізовані покажчики, правильніше говорити не про єдиний тип даних "покажчик", а про ціле сімейство типів: "покажчик на ціле", "покажчик на символ" і т.д. Можуть бути покажчики і на більш складні, інтегровані структури даних, і покажчики на покажчики.

Нетипізований покажчик, тип poіnter у PASCAL чи voіd * у C, служить для представлення адреси, за якою містяться дані невідомого типу. Робота з нетипізованими покажчиками істотно обмежена, вони можуть використовуватися тільки для збереження адреси, звертання за адресою, що задається нетипізованим покажчиком, неможливе.

ОПЕРАЦІЇ НАД ПОКАЖЧИКАМИ. Специфічними операціями, у яких приймають участь покажчики, є присвоювання, одержання адреси, вибірка.

Присвоювання є двомісною операцією, обидва операнди якої є покажчикам. Як і для інших типів, операція присвоювання копіює значення одного покажчика в інший, у результаті обидва покажчики будуть містити ту ж саму адресу пам'яті. Якщо обидва покажчики, що приймають участь в операції присвоювання, типізовані, то обидва вони повинні вказувати на об'єкти того ж самого типу.

Операція одержання адреси – одномісна, її операнд може мати будь-який тип, результатом є типізований (відповідно до типу операнда) покажчик, що містить адресу об¢єкта-операнда.

Операція вибірки – одномісна, її операндом є типізований (обов'язково!) покажчик, результат – дані, обрані з пам'яті за адресою, заданою операндом. Тип результату визначається типом покажчика-операнда.

Перерахованих операцій досить для рішення задач прикладного програмування, тому набір операцій над покажчиками, припустимих у мові PASCAL, цим і обмежується. Системне програмування вимагає більш гнучкої роботи з адресами, тому в мові C доступні також операції адресної арифметики.

Операції адресної арифметики. До покажчика можна додати ціле число чи відняти з нього ціле число. Оскільки пам'ять має лінійну структуру, додаток до адреси числа дасть адреса області пам'яті, зміщеної на це число байт (чи інших одиниць виміру) щодо вихідної адреси. Результат операцій "покажчик + ціле", "покажчик – ціле" має тип "покажчик". Можна відняти один покажчик з іншого (обидва покажчики-операнди при цьому повинні мати однаковий тип). Результат такого віднімання буде мати тип цілого числа із знаком. Його значення показує, на скільки байт (чи інших одиниць виміру) одна адреса відстоїть в пам'яті від іншої. Слід зазначити, що додавання покажчиків не має сенсу. Оскільки програма розробляється у відносних адресах і при різних своїх виконаннях може розміщатися в різних областях пам'яті, сума двох адрес у програмі буде давати різні результати при різних виконаннях. Зсув же об'єктів усередині програми один відносно одного не залежить від адреси завантаження програми, тому результат операції віднімання покажчиків буде постійним, і така операція є припустимою.

Операції адресної арифметики виконуються тільки над типізованими покажчиками. Одиницею виміру в адресній арифметиці є розмір об'єкта, що адресується покажчиком. Якщо змінна іpt визначена як покажчик, наприклад, на ціле число (іnt *іpt), тоді вираз іpt = іpt+1;

дасть адресу, більшу не на 1, а на кількість байт у цілому числі (у MS DOS це буде 2). Віднімання покажчиків також дає в результаті не кількість байт, а кількість об'єктів даного типу, що містяться в пам'яті між двома адресами. Це справедливо як для покажчиків на прості типи, так і для покажчиків на складні об'єкти, розміри яких складають десятки, сотні та більше байт.

У зв'язку з наявними в мові C розширеними засобами роботи з покажчиками, варто згадати і про різні представлення покажчиків у цій мові. У C покажчики будь-якого типу можуть бути ближніми (near), далекими (far) або найбільш далекими (huge). Ця диференціація пов'язана з фізичною структурою адреси в і8086, що була розглянута вище. Ближні покажчики представляють собою зсув у поточному сегменті, для представлення такого покажчика досить одного 16-розрядного слова. Далекі покажчики представляються двома 16-розрядними словами – сегментом і зсувом. Різниця між far- та huge-покажчиками полягає в тому, що для перших адресна арифметика працює тільки зі зсувом, не торкаючись сегментної частини адреси; таким чином, операції адресної арифметики можуть змінювати адресу в діапазоні не більш 64 Кбайт. Для huge-покажчиків в адресній арифметиці приймає участь і сегментна частина, і зсув. Таким чином, межа зміни адреси для них – 1 Мбайт.

Втім, це розходження в представленні покажчиків є тільки в системах програмування, що працюють у середовищі MS DOS, у сучасних же операційних системах, що підтримують віртуальну адресацію, розходжень між покажчиками немає, всі покажчики можна вважати гігантськими.

– Конец работы –

Эта тема принадлежит разделу:

Числові типи P

ПРОСТІ СТРУКТУРИ ДАНИХ R... Числові типи P Цілі типи P...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Покажчики

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Цілі типи
  За допомогою цілих чисел може бути представлена кількість об'єктів, що є дискретною за своєю природою (тобто рахункове число об'єктів). Розрізняють знакові та беззнакові цілі числа.

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

Десяткові типи
  Десяткові типи не підтримуються мовою PASCAL, але маються в деяких інших мовах, наприклад, COBOL, PL/1. Ці типи застосовуються для представлення таких даних, що у першу чергу повинн

Операції над числовими типами
  Над числовими типами, як і над всіма іншими, можливі насамперед чотири основних операції: створення, видалення, вибір, відновлення. Специфічні операції над числовими типами – добре

Бітові типи
У ряді задач може знадобитися робота з окремими двійковими розрядами даних. Найчастіше такі задачі виникають у системному програмуванні, коли, наприклад, окремий розряд пов'язаний зі станом окремог

Логічний тип
  Значеннями логічного типу boolean у PASCAL та bool у С++ може бути одна з попередньо оголошених констант false (неправда) або

Символьний тип
  Значенням символьного типу char є символи з деякої визначеної множини. У більшості сучасних персональних ЕОМ цією множиною є ASCІІ-код (Amerіcan Standard Code for І

Перераховний тип
  ЛОГІЧНА СТРУКТУРА. Перераховний тип представляє собою впорядкований тип даних, визначуваний програмістом, тобто програміст перераховує всі значення, що може при

Iнтервальний тип
  ЛОГІЧНА СТРУКТУРА. Один із способів утворення нових типів із вже існуючих – обмеження припустимого діапазону значень деякого стандартного скалярного типу або гр

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги