🗊Презентация Работа с динамической памятью

Нажмите для полного просмотра!
Работа с динамической памятью, слайд №1Работа с динамической памятью, слайд №2Работа с динамической памятью, слайд №3Работа с динамической памятью, слайд №4Работа с динамической памятью, слайд №5Работа с динамической памятью, слайд №6Работа с динамической памятью, слайд №7Работа с динамической памятью, слайд №8Работа с динамической памятью, слайд №9Работа с динамической памятью, слайд №10Работа с динамической памятью, слайд №11Работа с динамической памятью, слайд №12Работа с динамической памятью, слайд №13Работа с динамической памятью, слайд №14Работа с динамической памятью, слайд №15Работа с динамической памятью, слайд №16

Вы можете ознакомиться и скачать презентацию на тему Работа с динамической памятью. Доклад-сообщение содержит 16 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Указатели 
Работа с динамической памятью
Описание слайда:
Указатели Работа с динамической памятью

Слайд 2





Указатель
 – переменная, значением которой является адрес ячейки памяти. 
То есть указатель ссылается на блок данных из области памяти, причём на самое его начало. 
Указатель может ссылаться на переменную или функцию
Описание слайда:
Указатель  – переменная, значением которой является адрес ячейки памяти. То есть указатель ссылается на блок данных из области памяти, причём на самое его начало.  Указатель может ссылаться на переменную или функцию

Слайд 3





Работа с указателями
 Для этого нужно знать адрес переменной или функции. Так вот, чтобы узнать адрес конкретной переменной в С++ существует унарная операция взятия адреса &. Такая операция извлекает адрес объявленных переменных, для того, чтобы его присвоить указателю.
Указатели используются для передачи по ссылке данных, что намного ускоряет процесс обработки этих данных (в том случае, если объём данных большой), так как их не надо копировать, как при передаче по значению, то есть, используя имя переменной. В основном указатели используются для организации динамического распределения памяти, например при объявлении массива, не надо будет его ограничивать в размере. Ведь программист заранее не может знать, какого размера нужен массив тому или иному пользователю, в таком случае используется динамическое выделение памяти под массив. Любой указатель необходимо объявить перед использованием, как и любую переменную.
Описание слайда:
Работа с указателями Для этого нужно знать адрес переменной или функции. Так вот, чтобы узнать адрес конкретной переменной в С++ существует унарная операция взятия адреса &. Такая операция извлекает адрес объявленных переменных, для того, чтобы его присвоить указателю. Указатели используются для передачи по ссылке данных, что намного ускоряет процесс обработки этих данных (в том случае, если объём данных большой), так как их не надо копировать, как при передаче по значению, то есть, используя имя переменной. В основном указатели используются для организации динамического распределения памяти, например при объявлении массива, не надо будет его ограничивать в размере. Ведь программист заранее не может знать, какого размера нужен массив тому или иному пользователю, в таком случае используется динамическое выделение памяти под массив. Любой указатель необходимо объявить перед использованием, как и любую переменную.

Слайд 4





Инициализация указателей
1. Присваивание указателю адреса существующего объекта:
С помощью операции получения адреса:
int a=5;//целая переменная
int *p=&a;//в указатель записывается адрес а
С помощью значения другого инициализированного указателя:
int *r=p;
С помощью имени массива, которые трактуются как адрес:
int b[10]; //массив
int *t=b;//присваивание адреса начала массива
Описание слайда:
Инициализация указателей 1. Присваивание указателю адреса существующего объекта: С помощью операции получения адреса: int a=5;//целая переменная int *p=&a;//в указатель записывается адрес а С помощью значения другого инициализированного указателя: int *r=p; С помощью имени массива, которые трактуются как адрес: int b[10]; //массив int *t=b;//присваивание адреса начала массива

Слайд 5





Инициализация указателей
2. Присваивание указателю адреса области в явном виде:
char *cp=(char*) 0xb7000000;
где 0xb7000000 – шестнадцатеричная константа, 
(char*)- операция привидения типа: константа преобразуется к типу «указатель на char»
Описание слайда:
Инициализация указателей 2. Присваивание указателю адреса области в явном виде: char *cp=(char*) 0xb7000000; где 0xb7000000 – шестнадцатеричная константа, (char*)- операция привидения типа: константа преобразуется к типу «указатель на char»

Слайд 6





Инициализация указателей
3. Присваивание указателю пустого значения:
int *sum=NULL;
int *rez=0;
Где NULL в некоторых заголовочных файлах определена как указатель, равный нулю
Описание слайда:
Инициализация указателей 3. Присваивание указателю пустого значения: int *sum=NULL; int *rez=0; Где NULL в некоторых заголовочных файлах определена как указатель, равный нулю

Слайд 7





Выделение и освобождение динамической памяти
Выделение и присваивание ее адреса указателю:
Int* n=new int;//выделение достаточного для размещения величины типа int памяти и записывает адрес начала этого участка в переменную  n
Int*m=new int(10);//+инициализация выделенной динамической памяти значением 10
Int*q=new int[10];//выделение памяти под 10 величин типа int и записывает адрес начала этого участка в q, которая трактуется как имя массива
Освобождение памяти 
Delete n;
Delete m;
Delete [ ]q;//размерность массива при этом не указывается
Описание слайда:
Выделение и освобождение динамической памяти Выделение и присваивание ее адреса указателю: Int* n=new int;//выделение достаточного для размещения величины типа int памяти и записывает адрес начала этого участка в переменную n Int*m=new int(10);//+инициализация выделенной динамической памяти значением 10 Int*q=new int[10];//выделение памяти под 10 величин типа int и записывает адрес начала этого участка в q, которая трактуется как имя массива Освобождение памяти Delete n; Delete m; Delete [ ]q;//размерность массива при этом не указывается

Слайд 8





Выделяется память с помощью оператора new, а освобождается — с помощью оператора delete.
В момент, когда динамическая память выделена, она должна быть связана с некоторым указателем, подходящего типа (при выделении указывается тип и количество необходимых ячеек данного типа).
int* p;
p = new int;
*p = 10;
cout << *p; // 10
delete p; // память освобождена
Описание слайда:
Выделяется память с помощью оператора new, а освобождается — с помощью оператора delete. В момент, когда динамическая память выделена, она должна быть связана с некоторым указателем, подходящего типа (при выделении указывается тип и количество необходимых ячеек данного типа). int* p; p = new int; *p = 10; cout << *p; // 10 delete p; // память освобождена

Слайд 9





Сразу после создания динамический массив автоматически заполняется нулями (в отличии от обычного массива в статической или стековой памяти).
Сразу после создания динамический массив автоматически заполняется нулями (в отличии от обычного массива в статической или стековой памяти).
Если в указатель, уже хранящий адрес какого-то фрагмента динамической памяти, записать новый адрес, то фрагмент динамической памяти будет потерян, т. е. он не будет освобождён, но к нему никак нельзя будет обратиться (например, чтобы освободить этот фрагмент).
int* p;
p = new int(13);
int a = 666;
p = &a; // теперь до 13 никак не добраться
Описание слайда:
Сразу после создания динамический массив автоматически заполняется нулями (в отличии от обычного массива в статической или стековой памяти). Сразу после создания динамический массив автоматически заполняется нулями (в отличии от обычного массива в статической или стековой памяти). Если в указатель, уже хранящий адрес какого-то фрагмента динамической памяти, записать новый адрес, то фрагмент динамической памяти будет потерян, т. е. он не будет освобождён, но к нему никак нельзя будет обратиться (например, чтобы освободить этот фрагмент). int* p; p = new int(13); int a = 666; p = &a; // теперь до 13 никак не добраться

Слайд 10





Если не освобождать динамическую память, то она будет занята до завершения программы, что неприемлемо.
При выделении одной динамической переменной (одной ячейки памяти), можно сразу инициализировать её значение:
int* p;
p = new int(10);
cout << *p; // 10
delete p; // память освобождена
Описание слайда:
Если не освобождать динамическую память, то она будет занята до завершения программы, что неприемлемо. При выделении одной динамической переменной (одной ячейки памяти), можно сразу инициализировать её значение: int* p; p = new int(10); cout << *p; // 10 delete p; // память освобождена

Слайд 11





Можно выделять сразу несколько ячеек динамической памяти, получая динамический массив. Для этого его размер указывается в квадратных скобках после типа. Чтобы удалить динамический массив и освободить память используется оператор delete[]. 
Можно выделять сразу несколько ячеек динамической памяти, получая динамический массив. Для этого его размер указывается в квадратных скобках после типа. Чтобы удалить динамический массив и освободить память используется оператор delete[]. 
int* p;
p = new int[13];
for (int i=0; i<13; i++) {
    *(p+i) = i + 1;
    cout << *(p+i) << ' '; // 1 2 3 ... 13
}
delete[] p; // память освобождена, из неё удалены все элементы
Описание слайда:
Можно выделять сразу несколько ячеек динамической памяти, получая динамический массив. Для этого его размер указывается в квадратных скобках после типа. Чтобы удалить динамический массив и освободить память используется оператор delete[]. Можно выделять сразу несколько ячеек динамической памяти, получая динамический массив. Для этого его размер указывается в квадратных скобках после типа. Чтобы удалить динамический массив и освободить память используется оператор delete[]. int* p; p = new int[13]; for (int i=0; i<13; i++) { *(p+i) = i + 1; cout << *(p+i) << ' '; // 1 2 3 ... 13 } delete[] p; // память освобождена, из неё удалены все элементы

Слайд 12


Работа с динамической памятью, слайд №12
Описание слайда:

Слайд 13





Динамические многомерные массивы
Память выделяется в 2 этапа:
Сначала под столбец указателей на строки матрицы, а затем в цикле под каждую строку
Освобождение памяти осуществляется в обратном порядке
Описание слайда:
Динамические многомерные массивы Память выделяется в 2 этапа: Сначала под столбец указателей на строки матрицы, а затем в цикле под каждую строку Освобождение памяти осуществляется в обратном порядке

Слайд 14


Работа с динамической памятью, слайд №14
Описание слайда:

Слайд 15





Проблема становится особенно острой, когда в памяти теряются целые массивы (они занимают больше места, чем отдельные переменные).
Проблема становится особенно острой, когда в памяти теряются целые массивы (они занимают больше места, чем отдельные переменные).
int* p;
for (int i=1; i<=10; i++) {
    p = new int[100];
}
delete[] p;
Описание слайда:
Проблема становится особенно острой, когда в памяти теряются целые массивы (они занимают больше места, чем отдельные переменные). Проблема становится особенно острой, когда в памяти теряются целые массивы (они занимают больше места, чем отдельные переменные). int* p; for (int i=1; i<=10; i++) { p = new int[100]; } delete[] p;

Слайд 16





На каждом шаге цикла создаётся динамический массив из 100 элементов. Всего таких массивов будет создано 10, но только от последнего из них память будет освобождена после выхода из цикла. 9 массивов продолжат занимать место в памяти до конца программы. 9 массивов * 100 элементов * 4 байта = 3600 байт потерянной памяти, которую никак нельзя использовать (ни в этой программе, не в других запущенных).
На каждом шаге цикла создаётся динамический массив из 100 элементов. Всего таких массивов будет создано 10, но только от последнего из них память будет освобождена после выхода из цикла. 9 массивов продолжат занимать место в памяти до конца программы. 9 массивов * 100 элементов * 4 байта = 3600 байт потерянной памяти, которую никак нельзя использовать (ни в этой программе, не в других запущенных).
Описание слайда:
На каждом шаге цикла создаётся динамический массив из 100 элементов. Всего таких массивов будет создано 10, но только от последнего из них память будет освобождена после выхода из цикла. 9 массивов продолжат занимать место в памяти до конца программы. 9 массивов * 100 элементов * 4 байта = 3600 байт потерянной памяти, которую никак нельзя использовать (ни в этой программе, не в других запущенных). На каждом шаге цикла создаётся динамический массив из 100 элементов. Всего таких массивов будет создано 10, но только от последнего из них память будет освобождена после выхода из цикла. 9 массивов продолжат занимать место в памяти до конца программы. 9 массивов * 100 элементов * 4 байта = 3600 байт потерянной памяти, которую никак нельзя использовать (ни в этой программе, не в других запущенных).



Похожие презентации
Mypresentation.ru
Загрузить презентацию