Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Розкрийте суть проблеми висячих посилань і “сміття”.






Різні помилкові сценарії, що виникають в процесі утилізації сміття, можуть бути зведені до двох основних проблем (для простоти викладу вважатимемо, що програма написана на мові, в якій допускається явне управління пам'яттю):

 

1. Припустимо, що програміст створює дві різних змінних, вказуючих на одну і ту ж структуру даних, а потім знищує одну із змінних разом з її вмістом (тобто знищення пам'яті разом з утилізацією). Після цього друга змінна указує на невизначену область пам'яті. Такі змінні називаються висячими посиланнями. Приведемо приклад на З:

 

void* p = malloc (32000);

 

q = p;

 

free (p); // звільняє пам'ять, на яку указує p, але покажчик в q не

 

// знищується і виникає висяче посилання

 

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

 

 

void* p = malloc (32000);

 

p = q; // знищує єдиний покажчик на пам'ять, роблячи її сміттям

 

Можна сказати, що висячі посилання виникають в тих випадках, коли пам'ять утилізувалася " дуже швидко" (тобто раніше, ніж пам'ять дійсно перестає використовуватися), а сміття — коли пам'ять утилізувалася " дуже поволі" (тобто пізніше, ніж вона могла б бути повернена). Висячі посилання небезпечніші, оскільки можуть приводити до некоректної роботи програми, тоді як поява сміття цілком допустимо. Боротьбу із сміттям зазвичай покладають на спеціальний процес, званий збіркою сміття (garbage collection).

25). Охарактеризуйте автоматичну пам'ять та використання її у програмах. Локальне середовище.

26. Опишіть ієрархію простих та складних типів даних для реалізації об’єктно-орієнтованих програм на мові С++.

 

Тип даних – це набір значень однакової природи разом із операціями, які над ними розглядаються. Кожен тип даних визначає:

- внутрішнє подання даних у пам’яті комп’ютера;

- множину значень, яку можуть приймати величини цього типу;

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

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

Типи данихосновні (цілі, дійсні символьні, логічні) та складені (масиви, перераховувальний, структури, об’єднання, посилання, вказівники, класи)

У С/C++ змінні повинні бути описані, а їхній тип специфікований до того, як ці змінні будуть використані.

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

Наприклад:.

float weight;
int exam_score, max, min, i;
char ch, c, symbol;

Змінні можна ініціалізувати в місці їхніх описів, наприклад:

int height = 71;
float income = 26034.12;

Найпростішими скалярними типами, визначеними в С, є:

сhar — представляється як однобайтове ціле число;

int — двобайтове ціле;

long — чотирибайтове ціле;

float — чотирибайтове раціональне;

double — восьмибайтове раціональне;

Існують чотири специфікатори типу, які уточнюють внутрішнє подання даних типів – short, long, signed, unsigned

цілі:

unsigned char | 8 біт | 0..255

char [1] | 8 біт | 128..127

enum | 16 біт | -32, 768..32, 767

unsigned int | 16 біт | 0..65, 535

short int | 16 біт | -32, 768..32, 767

int | 16 біт | -32, 768..32, 767

unsigned long | 32 біт | 0..4, 294, 967, 295

long | 32 біт | -2, 147, 483, 648..2, 147, 483, 647

дійсні:

float | 32 біт | -3.4*10±38..3.4*10±38

double | 64 біт | -1.7*10±308..1.7*10±308

long double | 80 біт | -3.4*10±4932..1.1*10*10±4932

логічний: bool (true, false)8 біт

 

27. Охарактеризуйте типовані константи та пеpераховуваний тип у мові С++.

Константи у мові С++ використовуються для представлення значень, що не змінюються в процесі роботи програми. Константи використовуються у виразах справа від знаку присвоювання. Різним типам даних у мові C++ відповідає чотири типи констант:






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.