Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр

Подобни документи
Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

4

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

C++

Виртуални функции

Lush Green

Проф

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

Lush Green

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Black and White

Структура на програма в C - Част 2 - типове, функции

Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/

Маисви

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА

Програмиране на Паскал

В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операц

Годишното тематично разпределение по Компютърно моделиране за 4. клас N седмица Тема очаквани резултати Методи бележки и коментари Първи учебен срок Т

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) и

-

Homework 3

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

Анализ и оптимизация на софтуерни приложения

Анализ и оптимизация на софтуерни приложения

doll Механична кукла Механичните кукли автоматично повтарят предварително зададена последователност от движения. В Япония има традиции в изработката н

Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1

ТЕХНИЧЕСКИ УНИВЕРСИТЕТ СОФИЯ НИЛ ПО КОМПЮТЪРНА ГРАФИКА И ГИС СОФТУЕРНА ГРУПА АКСТЪР тел./факс(02) , (02) ; E-MAI

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5

Структура на програма в C - Част 9 - низове от символи, C-string

Анализ и оптимизация на софтуерни приложения

Microsoft Word - centrala_SB_02_bul.doc

Microsoft Word - KZ_TSG.doc

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет

Microsoft PowerPoint - Ppt ppt [Read-Only]

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re

РЕПУБЛИКА БЪЛГАРИЯ Министър на образованието и науката З А П О В Е Д РД / г. На основание чл. 93, ал. 1 от Закона за предучилищното и

IATI Day 1 / Senior Задача Activity (Bulgarian) X INTERNATIONAL AUTUMN TOURNAMENT IN INFORMATICS SHUMEN 2018 При лошо време навън Лора и Боби обичат д

ТЕХНИЧЕСКИ УНИВЕРСИТЕТ СОФИЯ УТВЪРЖДАВАМ Ректор: /проф. д-р инж. М. Христов/ Срок на обучение: Форма на обучение: 4 години редовна У Ч Е Б Е Н П Л А Н

Препис:

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 1 / 13

Програмен стек Схема на програмната памет... Програмен стек Статични данни Програмен код... Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 2 / 13

Програмен стек Програмен стек... граница на стека дъно на стека данни данни данни данни връх на стека Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 3 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Всеки заделен блок памет носи името на променливата Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Всеки заделен блок памет носи името на променливата Паметта се освобождава при изход от блока (или функцията), в който е дефинирана променливата Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Всеки заделен блок памет носи името на променливата Паметта се освобождава при изход от блока (или функцията), в който е дефинирана променливата Последно заделената памет се освобождава първа Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Всеки заделен блок памет носи името на променливата Паметта се освобождава при изход от блока (или функцията), в който е дефинирана променливата Последно заделената памет се освобождава първа Програмистът няма контрол над управлението на паметта Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Всеки заделен блок памет носи името на променливата Паметта се освобождава при изход от блока (или функцията), в който е дефинирана променливата Последно заделената памет се освобождава първа Програмистът няма контрол над управлението на паметта Паметта не може да се освободи по-рано (преди края на блока) Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Всеки заделен блок памет носи името на променливата Паметта се освобождава при изход от блока (или функцията), в който е дефинирана променливата Последно заделената памет се освобождава първа Програмистът няма контрол над управлението на паметта Паметта не може да се освободи по-рано (преди края на блока) Паметта не може да се запази за по-дълго (след края на блока) Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Всеки заделен блок памет носи името на променливата Паметта се освобождава при изход от блока (или функцията), в който е дефинирана променливата Последно заделената памет се освобождава първа Програмистът няма контрол над управлението на паметта Паметта не може да се освободи по-рано (преди края на блока) Паметта не може да се запази за по-дълго (след края на блока) Количеството заделена памет до голяма степен е определено по време на компилация Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Програмен стек Свойства на програмния стек Паметта се заделя в момента на дефиниция Всеки заделен блок памет носи името на променливата Паметта се освобождава при изход от блока (или функцията), в който е дефинирана променливата Последно заделената памет се освобождава първа Програмистът няма контрол над управлението на паметта Паметта не може да се освободи по-рано (преди края на блока) Паметта не може да се запази за по-дълго (след края на блока) Количеството заделена памет до голяма степен е определено по време на компилация При какви случаи заделената памет може да варира по време на изпълнение? Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 4 / 13

Динамична памет Област за динамична памет (heap) Динамичната памет може да бъде заделена и освободена по всяко време на изпълнение на програмата Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 5 / 13

Динамична памет Област за динамична памет (heap) Динамичната памет може да бъде заделена и освободена по всяко време на изпълнение на програмата Областта за динамична памет е набор от свободни блокове памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 5 / 13

Динамична памет Област за динамична памет (heap) Динамичната памет може да бъде заделена и освободена по всяко време на изпълнение на програмата Областта за динамична памет е набор от свободни блокове памет Програмата може да заяви блок с произволна големина Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 5 / 13

Динамична памет Област за динамична памет (heap) Динамичната памет може да бъде заделена и освободена по всяко време на изпълнение на програмата Областта за динамична памет е набор от свободни блокове памет Програмата може да заяви блок с произволна големина Операционната система се грижи за управлението на динамичната памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 5 / 13

Динамична памет Област за динамична памет (heap) Динамичната памет може да бъде заделена и освободена по всяко време на изпълнение на програмата Областта за динамична памет е набор от свободни блокове памет Програмата може да заяви блок с произволна големина Операционната система се грижи за управлението на динамичната памет поддържа карта кои клетки са свободни и кои заети Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 5 / 13

Динамична памет Област за динамична памет (heap) Динамичната памет може да бъде заделена и освободена по всяко време на изпълнение на програмата Областта за динамична памет е набор от свободни блокове памет Програмата може да заяви блок с произволна големина Операционната система се грижи за управлението на динамичната памет поддържа карта кои клетки са свободни и кои заети контролира коя част от паметта от коя програма се използва (защитен режим) Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 5 / 13

Динамична памет Област за динамична памет (heap) Динамичната памет може да бъде заделена и освободена по всяко време на изпълнение на програмата Областта за динамична памет е набор от свободни блокове памет Програмата може да заяви блок с произволна големина Операционната система се грижи за управлението на динамичната памет поддържа карта кои клетки са свободни и кои заети контролира коя част от паметта от коя програма се използва (защитен режим) позволява използването на външни носители (виртуална памет) Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 5 / 13

Динамична памет Схема на динамичната памет... 12.3456 "abcd" 130 62... Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 6 / 13

Динамична памет Заделяне на динамична памет Заделянето на динамична памет става с операциите new и new[] Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 7 / 13

Динамична памет Заделяне на динамична памет Заделянето на динамична памет става с операциите new и new[] new <тип> заделя блок от памет за една променлива от <тип> Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 7 / 13

Динамична памет Заделяне на динамична памет Заделянето на динамична памет става с операциите new и new[] new <тип> заделя блок от памет за една променлива от <тип> new <тип>[<брой>] заделя блок от памет за масив от <брой> елемента от <тип> Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 7 / 13

Динамична памет Заделяне на динамична памет Заделянето на динамична памет става с операциите new и new[] new <тип> заделя блок от памет за една променлива от <тип> new <тип>[<брой>] заделя блок от памет за масив от <брой> елемента от <тип> new <тип>(<инициализация>) заделя блок от памет за една променлива от <тип> и я инициализира със зададените един или повече параметри Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 7 / 13

Динамична памет Заделяне на динамична памет Заделянето на динамична памет става с операциите new и new[] new <тип> заделя блок от памет за една променлива от <тип> new <тип>[<брой>] заделя блок от памет за масив от <брой> елемента от <тип> new <тип>(<инициализация>) заделя блок от памет за една променлива от <тип> и я инициализира със зададените един или повече параметри връща указател <тип>* към новозаделения блок Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 7 / 13

Динамична памет Примери за заделяне int* p = new int; p...?... Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 8 / 13

Динамична памет Примери за заделяне int* p = new int; float* q = new float(1.23); p q...?...... 1.23... Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 8 / 13

Динамична памет Примери за заделяне int* p = new int; float* q = new float(1.23); char* s = new char[6]; strcpy(s, "hello"); p q s...?...... 1.23...... h e l l o \0... Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 8 / 13

Динамична памет Примери за заделяне int* p = new int; float* q = new float(1.23); char* s = new char[6]; strcpy(s, "hello"); char** ss = new char*(s); p q s ss...?...... 1.23...... h e l l o \0......... Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 8 / 13

Динамична памет Освобождаване на памет Динамична памет се освобождава с операциите delete и delete[] Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 9 / 13

Динамична памет Освобождаване на памет Динамична памет се освобождава с операциите delete и delete[] delete <указател> освобождава блок от памет с начало, сочено от <указател> Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 9 / 13

Динамична памет Освобождаване на памет Динамична памет се освобождава с операциите delete и delete[] delete <указател> освобождава блок от памет с начало, сочено от <указател> delete[[<брой>]] <указател> освобождава блок от памет, съдържащ масив от <брой> обекти, първият от които е сочен от <указател> Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 9 / 13

Динамична памет Освобождаване на памет Динамична памет се освобождава с операциите delete и delete[] delete <указател> освобождава блок от памет с начало, сочено от <указател> delete[[<брой>]] <указател> освобождава блок от памет, съдържащ масив от <брой> обекти, първият от които е сочен от <указател> указването на <брой> не е задължително, понеже операционната система знае колко е голям заделения блок Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 9 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Не е позволено освобождаването на памет в програмния стек или областта за програмен код Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Не е позволено освобождаването на памет в програмния стек или областта за програмен код int x; int* p = &x;... delete p; Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Не е позволено освобождаването на памет в програмния стек или областта за програмен код int x; int* p = &x;... delete p; delete sin; delete main; Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Не е позволено освобождаването на памет в програмния стек или областта за програмен код int x; int* p = &x;... delete p; delete sin; delete main; Не е позволено частично освобождаване на памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Не е позволено освобождаването на памет в програмния стек или областта за програмен код int x; int* p = &x;... delete p; delete sin; delete main; Не е позволено частично освобождаване на памет int* a = new int[10];... delete (a+2); Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Не е позволено освобождаването на памет в програмния стек или областта за програмен код int x; int* p = &x;... delete p; delete sin; delete main; Не е позволено частично освобождаване на памет int* a = new int[10];... delete (a+2); Не е позволено използването на памет след като е освободена Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Не е позволено освобождаването на памет в програмния стек или областта за програмен код int x; int* p = &x;... delete p; delete sin; delete main; Не е позволено частично освобождаване на памет int* a = new int[10];... delete (a+2); Не е позволено използването на памет след като е освободена Не е позволено повторното освобождаване на една и съща памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Ограничения при освобождаването на памет На delete може да се подаде само указател, върнат от new Не е позволено освобождаването на памет в програмния стек или областта за програмен код int x; int* p = &x;... delete p; delete sin; delete main; Не е позволено частично освобождаване на памет int* a = new int[10];... delete (a+2); Не е позволено използването на памет след като е освободена Не е позволено повторното освобождаване на една и съща памет int* p = new int[5],*q = p; delete p; q[1] = 5; delete q; Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 10 / 13

Особености на работа с динамична памет Задачи за динамична памет 1 Да се напише програма, която въвежда няколко положителни дробни числа в динамичната памет и намира средното им аритметично Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 11 / 13

Особености на работа с динамична памет Задачи за динамична памет 1 Да се напише програма, която въвежда няколко положителни дробни числа в динамичната памет и намира средното им аритметично 2 Да се напише програма, която създава матрица от числа в динамичната памет и я транспонира Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 11 / 13

Особености на работа с динамична памет Особености на динамичната памет Програмистът има контрол над заделянето на памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 12 / 13

Особености на работа с динамична памет Особености на динамичната памет Програмистът има контрол над заделянето на памет Програмистът носи отговорност за правилната работа с динамичната памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 12 / 13

Особености на работа с динамична памет Особености на динамичната памет Програмистът има контрол над заделянето на памет Програмистът носи отговорност за правилната работа с динамичната памет Заделената динамична памет остава непокътната до освобождаването ѝ с delete или до завършване на програмата Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 12 / 13

Особености на работа с динамична памет Особености на динамичната памет Програмистът има контрол над заделянето на памет Програмистът носи отговорност за правилната работа с динамичната памет Заделената динамична памет остава непокътната до освобождаването ѝ с delete или до завършване на програмата След приключване на програмата, цялата заделена от нея памет се освобождава от операционната система Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 12 / 13

Особености на работа с динамична памет Особености на динамичната памет Програмистът има контрол над заделянето на памет Програмистът носи отговорност за правилната работа с динамичната памет Заделената динамична памет остава непокътната до освобождаването ѝ с delete или до завършване на програмата След приключване на програмата, цялата заделена от нея памет се освобождава от операционната система Честото заделяне и освобождаване на малки блокове памет води до фрагментация...... Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 12 / 13

Особености на работа с динамична памет Особености на динамичната памет Програмистът има контрол над заделянето на памет Програмистът носи отговорност за правилната работа с динамичната памет Заделената динамична памет остава непокътната до освобождаването ѝ с delete или до завършване на програмата След приключване на програмата, цялата заделена от нея памет се освобождава от операционната система Честото заделяне и освобождаване на малки блокове памет води до фрагментация...... Динамично заделените блокове памет не се свързват с имена Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 12 / 13

Особености на работа с динамична памет Грешки при работа с динамична памет Работа с указател към незаделена или освободена памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 13 / 13

Особености на работа с динамична памет Грешки при работа с динамична памет Работа с указател към незаделена или освободена памет Освобождаване на непозволена памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 13 / 13

Особености на работа с динамична памет Грешки при работа с динамична памет Работа с указател към незаделена или освободена памет Освобождаване на непозволена памет Загубване на указател към заделена памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 13 / 13

Особености на работа с динамична памет Грешки при работа с динамична памет Работа с указател към незаделена или освободена памет Освобождаване на непозволена памет Загубване на указател към заделена памет Неосвобождаване на неизползвана памет Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 13 / 13

Особености на работа с динамична памет Грешки при работа с динамична памет Работа с указател към незаделена или освободена памет Освобождаване на непозволена памет Загубване на указател към заделена памет Неосвобождаване на неизползвана памет Изтичане на памет (memory leak) Трифон Трифонов (УП 16/17) Динамична памет 21 декември 2016 г. 13 / 13