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

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

a near

a far

a 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:

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

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

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

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

Модифікатори const, volatile,


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: