Курсова робота
з дисципліни
«Технології програмування»
Тема: «Використання динамічних списків на прикладі гри« Хрестики-нулики »»
Введення
Пам'ять, що виділяється в процесі виконання програми, називається динамічною. Після виділення динамічної пам'яті вона зберігається до її явного звільнення, що може бути виконано тільки за допомогою спеціальної операції або бібліотечної функції.
Переваги динамічної пам'яті:
- економічність і ефективність її використання;
можливість динамічної зміни числа елементів в пов'язаних структурах, наприклад, списках (статичної пам'яті число елементів фіксовано для кожної компіляції);
статичні змінні існують тільки протягом життя блоку, в якому вони оголошені, а динамічні - і після виходу з блоку до закінчення програми, а на практиці - стільки, скільки потрібно за алгоритмом;
змінна, що розміщується динамічно, що не оголошується в розділі VAR і не має імені в програмі («невидимка»). Компілятор не планує виділення місця в пам'яті під такі змінні.
Недоліки динамічної пам'яті:
- ускладнюються процеси виділення і звільнення динамічної пам'яті в порівнянні зі статичною;
ускладнюються алгоритми обробки даних, представлених динамічними структурами.
У процесі виконання програми ділянку динамічної пам'яті доступний скрізь, де доступний покажчик, що адресує цю ділянку. Таким чином, можливі наступні три варіанти роботи з динамічною пам'яттю, що виділяється в деякому блоці (наприклад, в тілі неголовних функції).
· Покажчик (на ділянку динамічної пам'яті) визначений як локальний об'єкт автоматичного запам'ятовування. У цьому випадку виділена пам'ять буде недоступна при виході за межі блоку локалізації покажчика, і її потрібно звільнити перед виходом з блоку.
· Покажчик визначений як локальний об'єкт статичної пам'яті. Динамічна пам'ять, виділена одноразово в блоці, доступна через покажчик при кожному повторному вході в блок. Пам'ять потрібно звільнити тільки після закінчення її використання.
· Покажчик є глобальним об'єктом по відношенню до блоку. Динамічна пам'ять доступна у всіх блоках, де видний покажчик. Пам'ять потрібно звільнити тільки після закінчення її використання.
Покажчик може перебувати в одному з трьох станів, а саме:
містить адреса розміщення;
містить значення зумовленою константи
nil ; такий покажчик називається порожнім, тобто не вказує ні на яку змінну.
Покажчик зі значенням nil містить 0 в кожному з чотирьох байтів.
Покажчики можна
? порівнювати з іншими покажчиками,
? присвоювати їм адресу або значення іншого покажчика,
? передавати як параметр.
Покажчик не можна
? віддрукувати;
? вивести на екран.
Засоби виділення і звільнення пам'яті
У мові C ++ існують передбачені стандартом C ++, а також перейшли у спадок від C засоби виділення і звільнення пам'яті. Крім того, кожна платформа надає свої кошти управління пам'яттю (як правило, стандартні мовні засоби якраз до них і звертаються, але у програміста є можливість звернутися до них безпосередньо). Проблема цих систем і мов (у тому числі C ++) полягає в тому, що програміст сам відповідає за своєчасне звільнення блоків пам'яті після того, як в них відпадає потреба - для цього теж є спеціальні функції. Якщо програміст забуде звільнити блок, згодом може виникнути нестача пам'яті - віртуальний адресний простір процесу заб'ється і вільного місця не залишиться, хоча в той же час в пам'яті будуть присутні блоки, які фактично не використовуються.
Розглянемо коротко засоби управління пам'яттю.
Оператор new дуже зручний - він не вимагає вказівки розміру блоку, який потрібно виділити. Розмір визначається компілятором автоматично виходячи з типу, який вказується після ключового слова new. Крім виклику самої функції виділення пам'яті відбувається ще й виклик конструктора об'єкта, якщо вказано об'єктний тип. Синтаксис виклику оператора має кілька варіантів, розглянемо найбільш часто вживається...