Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы на модуль 1 ОП.docx
Скачиваний:
8
Добавлен:
24.11.2019
Размер:
926.17 Кб
Скачать

Явне зведення типів

Явне зведення типів (explicit casting types) може використовуватися як у суворо, так і не суворо типізованих мовах.

Для явного зведення типів використовується кваліфікація виразу індикатором типу, наприклад, таким чином T(E), де Т - це індикатор типу, до якого необхідно звести значення; Е - вираз, що позначає значення, яке необхідно привести до типу Т. Наприклад, char(65) або int(‘A’), тут Т це char, int, а E це 65, ‘A’.

Щоразу, коли можливе зведення типу, так само можливе й обернене зведення.

У мові Pascal для явного зведення можуть використовуватися стандартні підпрограми, хоча це нетипово для суворо типізованих мов.

У мові С, поряд із зазначеною формою кваліфікації, може використовуватися друга форма, виду (Т)Е. Дві форми необхідні, щоб розв’язувати синтаксичні конфлікти, які іноді виникають.

Неявне зведення типів

У не суворо типізованих мовах, передбачається широке використання неявного зведення типів.

Неявне зведення типів (implicit casting types) – це автоматичне зведення значень одного типу в значення іншого типу за правилами, передбаченими реалізацією мови. Ці правила необхідно знати навіть в тому разі, коли програміст не використовує неявних зведень, оскільки вони можуть застосовуватися в тих конструкціях, які програміст бере готовими. Тому неявне зведення – це мовно-залежний механізм, застосування якого різко знижує мобільність програм.

У мові Ada неявні зведення повністю заборонені. У мові Pascal виконується неявне зведення лише значень цілих типів у значення дійсного типу. У мові С передбачено широке використання неявного зведення типів, а в операторах присвоювання неявні зведення здійснюються навіть із втратою точності.

Уникнення суворої типізації

Наведемо один спосіб уникнення суворої типізації шляхом застосування нетипізованих вказівних змінних. Нехай U1, U2 – позначення типізованих вказівних змінних різних типів; R – позначення простій змінної типу, відмінного від типу змінної U2; Р – нетипізована вказівна змінна; type's U2 – явне зведення типу (до типу змінної U2). Необхідно виконати оператори присвоювання такого виду:

у мові Pascal:U2 := U1; або U2 := @R;

у мові C:U2 = U1; або U2 = &R; .

Згідно з суворої типізацією мов виконати такі оператори присвоювання неможливо через різнотипності змінних U1, U2 та U2 і R. Уникнути суворої типізації можна в такий спосіб:

У мові Pascal:Р := U1;абоР := @R;і даліU2 := Р;

У мові С:Р = U1;абоР = &R;і даліU2 = (typ`s U2)Р;

Отже, для уникнення суворої типізації використовується нетипізована вказівна змінна Р, значенням вмісту якої є адреса.

19)Стратегії розподілу пам'яті

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

Зазвичай слід розглядати дві стратегії розподілу пам'яті - статичну і динамічну. Остання, у свою чергу, поділяється ще на дві – динамічний розподіл пам'яті на основі блока та динамічний розподіл пам'яті в купі.

20) Стратегія статичного розподілу пам'яті

Цю стратегію можна схарактеризувати так:

  • зв'язок між ім’ям змінної та генерованим вмістом установлюється один раз і лишається незмінним упродовж усього часу виконання програми;

  • розподіл пам'яті відбувається до початку виконання програми, під час трансляції або редагування зв'язків, тому не має потреби вставляти у програму жодних додаткових виконуваних операторів;

  • усі об'єкти в програмі є глобальними, мають глобальний період існування, глобальну область дії;

  • захоплення та вивільнення пам'яті відбуваються автоматично;

  • вміст змінної ініціалізується нулем відповідного типу;

  • пам'ять розміщується в .EXE файлі, займаючи обмежене місце (зазвичай сегмент 64К).