
- •Обчислення виразів
- •Типи виразів
- •Арифметичні вирази, відношення, логічні, базові вирази
- •Приклади виразів
- •Використання та зміна значення виразів
- •Правила конструювання виразів
- •Суворо типізована мова
- •Зведення типів
- •Явне зведення типів
- •Неявне зведення типів
- •Уникнення суворої типізації
- •Існування та дія програмних об'єктів
- •Період існування та область дії
- •Нумерація, номер і глибина вкладеності блока
- •Блокова структура програми
- •Мембранний ефект.
- •Регулювання області дії блока
- •Регулювання періоду існування
- •Блокова структура програми
- •Глобальне розрізнення видимості позначень (імен)
- •Стратегії розподілу пам'яті
- •Стратегія статичного розподілу пам'яті
- •Стратегія динамічного розподілу пам'яті на основі блока
- •Стратегія динамічного розподілу пам'яті на основі блока (продовження)
- •Стратегія розподілу пам'яті в купі
- •Стратегія розподілу пам'яті в купі (продовження)
- •Динамічний розподіл пам'яті на основі купи (Pascal)
- •Динамічний розподіл пам'яті на основі купи (c)
- •Приклади утворення сміття
Блокова структура програми
Мембранний ефект.
Межі блока мають властивості мембрани – «пропускають» дію об'єктів лише в одному напрямі, у даному разі із зовні всередину блока. Цю властивість називають ще мембранним ефектом. Вона використовується для регулювання області дії об'єктів програми.
Регулювання області дії блока
На основі мембранного ефекту будується механізм регулювання області дії за такими правилами:
областю дії об'єкту є блок, в якому об'єкт оголошено;
область дії об'єкта являють собою також усі блоки, вкладені в даний блок, за винятком тих блоків, в яких оголошено об'єкти з точно такими самими позначеннями;
якщо в блоці оголошено об'єкт із таким же самим позначенням, як у об'єкта, оголошеного в охопному блоці, то усередині цього блока діє оголошений у ньому об'єкт;
усі об'єкти, оголошені у блоці, «невидимі» поза цим блоком, а отже не можуть там діяти.
Регулювання періоду існування
Період існування оголошеного об'єкта визначається часом виконання блоку. І якщо у блоці оголошений об'єкт, то він існує доти, доки виконується даний блок. У деяких мовах є засоби, які передбачають дострокове припинення існування об'єкта.
Шляхом опису двох об'єктів з однаковими позначеннями регулюється область дії об'єкта за допомогою мембранного ефекту. Водночас, якщо один об'єкт (охопного блока) стає недоступним, він не припиняє існування, оскільки відповідний блок і далі виконується.
Блокова структура програми
Розглянемо приклад в мові С:
{ int nA;
int nB;
char cA;
nA = 10;
nB = 20;
nA = nA + nB;
{
int nA;
int nC;
nC = 20;
nA = nB + nC;
}
cA = “A”
nA = int(cA) + nC;
}
Глобальне розрізнення видимості позначень (імен)
Іноді, в разі розгляду об'єктів, що мають одне і теж позначення, необхідно подолати мембранний ефект. Для його виконання у мовах програмування передбачається оператор глобального розрізнення видимості позначень (імен), який має позначення <::>.
static int nV;
main()
{
auto int nV;
nV = 10;
:: nV = 20;
}
Стратегії розподілу пам'яті
Для будь-якої програми, на жаль, доступно обмежену кількість пам'яті, а тому при компіляції та виконанні програми дуже важливу роль відіграє стратегія розподілу пам'яті. На неї, вирішальний вплив мають, як мова програмування, так і операційна система, під управлінням якої виконується програма.
Розглянемо дві стратегії розподілу пам'яті - статичну і динамічну. Остання, у свою чергу, поділяється ще на дві – динамічний розподіл пам'яті на основі блока та динамічний розподіл пам'яті в купі.
Вказані стратегії реалізуються в пам'яті, розподілений наприклад, так, як зображено на рисунку, якщо брати до уваги операційну систему Windows).
Стратегія статичного розподілу пам'яті
зв'язок між ім’ям змінної та генерованим вмістом установлюється один раз і лишається незмінним упродовж усього часу виконання програми;
розподіл пам'яті відбувається до початку виконання програми, під час трансляції або редагування зв'язків, тому не має потреби вставляти у програму жодних додаткових виконуваних операторів;
усі об'єкти в програмі є глобальними, мають глобальний період існування, глобальну область дії;
захоплення та вивільнення пам'яті відбуваються автоматично;
вміст змінної ініціалізується нулем відповідного типу;
пам'ять розміщується в .EXE файлі, займаючи обмежене місце (зазвичай сегмент 64К)