Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
81
Добавлен:
07.03.2016
Размер:
3 Мб
Скачать
☆

3.7. Описувачі з модифікаторами

3.7.1. Моделі пам'яті

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

Існують такі моделі пам'яті: huge, large, compact, medium, small. Використовуючи певні модифікатори, можна визначати розміщення в пам'яті конкретних об'єктів, що відрізняється від загальноприйнятого в межах вибраної загальної моделі пам'яті.

3.7.2. Модифікатори типу доступу в пам'яті

Відповідно до механізму адресації, існують покажчики (і модифікатори) трьох типів:

 near

 far

 huge

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

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

Для покажчиків типу huge в усіх операціях використовується адреса як сегмента, так і зміщення. Тому для покажчиків типу huge завжди коректними будуть операції порівняння, додавання.

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

main{

static int far p;

static near int*x;

x=&p;

}

В останньому рядку цієї програми виникає помилка за рахунок використання даних з різною адресацією. Безпомилковий варіант:

main{

static int far p;

static far int*x;

x=&p;

}

У Microsoft C існує можливість модифікувати безпосередньо сам покажчик, тобто допускається конструкція вигляду

int*far x;

int far*far x;

Int huge*near X;

У MS C, крім описаних можливостей, існує чотири спеціальні покажчики типу near:

 cs – сегмент коду;

 ds – сегмент даних;

 ss – сегмент стеку;

 es – динамічна пам'ять.

3.7.3. Модифікатори const, volatile, cdecl, pascal, interrupt

Крім описаних модифікаторів, які змінюють тип доступу до пам'яті, використовують низку інших: const, volatile, cdecl, pascal, interrupt.Модифікатор const забороняє змінювати значення модифікованого об'єкта:

const int pi=3.14;

pi=3.15;//у цьому рядку буде помилка;

Модифікатор pascal використовується у випадках, коли виникає необхідність об'єднувати об'єктні коди різних мов програмування. С-ком­пілятор за попередньої обробки модифікує константи шляхом дописування перед кожною символу підкреслювання. Крім того, розрізняються великі та малі літери. У мові С існує специфічна форма передавання параметрів функціям. Параметри передаються, починаючи з останнього аргументу. Модифікатор pascal, записаний у С-програмі, забезпечує форму ідентифікатора й механізм передавання параметрів у функцію, які прийняті в мові Паскаль та аналогічних мовах.

Існує опція компіляції, що присвоює всім об'єктам тип pascal. При цьому виникає необхідність для деяких об'єктів залишити стандартний механізм мови С. Тоді використовується модифікатор cdecl.

Модифікатор interrupt використовується для оголошення функцій, які працюють із перериваннями процесора.

Модифікатор volatile указує на те, що значення певної змінної може бути змінено не лише програмно, але й через певні переривання процесора. Така змінна абсолютно нестабільна. Наприклад:

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]