Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
spz / шпори.doc
Скачиваний:
99
Добавлен:
23.02.2016
Размер:
1.56 Mб
Скачать

Розподіл пам’яті.

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

Перелік дій компіляторі для ідентифікації змінних, констант, функцій, процедур та інших одиниць мови:

  1. Імена локальних змінних доповнюється іменами блоків, в яких змінні описані.

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

  3. Імена процедур і функцій що належать класам в ОО мовах доповнюються іменами класу, якому вони належать.

Принципи розподілу пам’яті.

Розподіл пам’яті це процес, що ставить у відповідність лексичним одиницям вхідної програми адресу розмір та атрибути області пам’яті необхідної для лексичної одиниці. Область пам’яті це блок комірок пам’яті, що виділений для даних об’єднаних логічно.

Логіка таких об’єднань задається семантикою вхідної мови.

Розподіл пам’яті працює з лексичними одиницями мови

Як правило даними для процесу розподілу пам’яті є таблиця ідентифікаторів. Для складних структур використовують правила розподілу пам’яті що обумовлені семантикою цих структур.

Правила:

  1. Для масивів це добуток числа на розмір пам’яті для одного елемента.

  2. Для структур це сума розмірів пам’яті для всіх полях

  3. Для об’єднання це розмір максимального поля і записується так.

  4. Для реалізації об’єктів в класі розмір пам’яті для структури з тими ж іменованими полями+ пам’ять від службової інформації ООП.

Пам’ять ділиться на локальну і глобальну, динамічну і статичну.

Локальна і глобальна пам’ять

Глобальна пам’ять це пам’ять що виділяється один раз при ініціалізації результуючої програми і діє весь час виконання програми.

Локальна область пам’яті це область що виділяється на початку виконання деякого фрагмента результуючої програми(процедури), і може бути звільнена по завершенні виконанні фрагмента. Доступ до лакальної області пам’яті завжди заборонений за межами фрагмента програми для якого дона виділена.

Статична область пам’яті це область розмір якої відомий на етапі компіляції, компілятор породжує деяку адресу(відносну) для статичної області пам’яті і у статичну область попадає більшість змінних і констант. Динамічна область – розмір якої на етапі компіляції невідомий. Розмір динамічної області буде відомий в процесі виконання. З динамічною областю вказані вказівники і класи. Динамічні області пам’яті поділяють на ті, що виділяє користувач та компілятор.

Не 4.3. Способи внутрішнього представлення програм Зв'язані облікові структури, що представляють синтаксичні дерева.

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

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

Синтаксичні дерева можуть бути перетворені в інші форми внутрішнього представлення програми, що представляють собою лінійні списки, з урахуванням семантики вхідної мови. Алгоритми такого роду перетворень розглянуті далі. Ці перетворення виконуються на основі принципів СК-компіляції.

Соседние файлы в папке spz