Разделы презентаций


Мова С++

Содержание

Ключові терміниДинамічна пам'ять - це пам'ять, що виділяється програмі для її роботи за вирахуванням сегмента даних, стека, в якому розміщуються локальні змінні підпрограм і власне тіла програми.Динамічні змінні - це змінні,

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

Слайд 1Мова С++
Лекція 13

Динамічний розподіл пам’яті

Мова С++Лекція 13Динамічний розподіл пам’яті

Слайд 2Ключові терміни
Динамічна пам'ять - це пам'ять, що виділяється програмі для

її роботи за вирахуванням сегмента даних, стека, в якому розміщуються

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

Слайд 3Розподіл оперативної пам'яті для програм на С ++
Вища адреса
Область стека
Область

вільної пам’яті для динамічного розміщення
Область глобальних змінних
Область програми
Нижча адреса

Розподіл оперативної пам'яті для програм на С ++Вища адресаОбласть стекаОбласть вільної пам’яті для динамічного  розміщенняОбласть глобальних

Слайд 4Варіанти роботи з динамічною пам'яттю, що виділяється в деякому блоці
Вказівник

(на область динамічної пам'яті) визначено як локальний об'єкт автоматичної пам'яті.

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

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

Слайд 5Робота з динамічною пам'яттю з допомогою операцій new і delete
Синтаксис:
new

Ім’яТипу; або new Ім’яТипу [Ініціалізатор];
Синтаксис застосування операції:
Вказівник = new

Ім’яТипу [Ініціалізатор];
new float - виділяє ділянку пам'яті розміром 4 байти
new int (15) - виділяє ділянку пам'яті 4 байта і ініціалізує цю ділянку цілим значенням 15
Попередньо кожен покажчик повинен бути оголошений:
тип *Ім’яВказівника;  
наприклад:
float * pi; // Оголошення змінної pi
pi = new float; // Виділення пам'яті для змінної pi
* Pi = 2.25; // Присвоєння значення

Робота з динамічною пам'яттю з допомогою операцій new і deleteСинтаксис:new Ім’яТипу;   або  new Ім’яТипу

Слайд 6Оператор new найчастіше використовується для розміщення в пам'яті даних визначених

користувачем типів, наприклад, структур:
struct Node {


char *Name;
int Value;
Node *Next }; 
Node *PNode; //оголошується вказівник 
PNode = new Node; //виділяется пам’ять 
PNode->Name = "Ata"; //присвоюються значення
PNode->Value = 1;
PNode->Next = NULL;

Слайд 7При виділенні динамічної пам'яті для масиву його розміри повинні бути

повністю визначені.
ptr = new int [10]; //10 елементів типа int

або 40 байтів
ptr = new int [ ]; //помилка

int *b = new int (10); В даному операторі, крім описаних вище дій, проводиться ініціалізація виділеної динамічної пам'яті значенням 10.

int *q = new int [10]; У цьому випадку операція new виконує виділення пам'яті під 10 величин типу int (масиву з 10 елементів) і записує адресу початку цієї ділянки в змінну q, яка може трактуватися як ім'я масиву.

При виділенні динамічної пам'яті для масиву його розміри повинні бути повністю визначені. ptr = new int [10];	//10

Слайд 8Звільнення виділеного операцією new ділянки пам'яті
Синтаксис
delete вказівник;

звільняється ділянку пам'яті
delete x;

звільнення

пам'яті, виділеної для масиву
delete [ ] указатель;

Звільнення виділеного операцією new ділянки пам'ятіСинтаксисdelete вказівник;звільняється ділянку пам'ятіdelete x;звільнення пам'яті, виділеної для масивуdelete [ ] указатель;

Слайд 9Робота з динамічною пам'яттю з допомогою бібліотечних функцій malloc (calloc)

і free

Робота з динамічною пам'яттю з допомогою бібліотечних функцій malloc (calloc) і free

Слайд 10Приклад. Ввести і надрукувати в зворотному порядку набір дійсних чисел,

кількість яких заздалегідь не фіксована, а вводиться до початку введення

самих числових значень.

#include “stdafx.h”
#include
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{ float* t; //Вказівник на блок пам’яті
int i,n;
printf("n="); //n – кількість елементів
scanf("%d", &n);
t=(float *)malloc(n*sizeof(float));
for (i=0; i printf("x[%d]=",i); scanf("%f", &t[i]); }
//цикл печати результатов
for (i=n-1; i>=0; i--){ printf("\nx[%d]=%f",i,t[i]); }
free(t); //звльнює пам’ять
system("pause"); return 0;}

Приклад. Ввести і надрукувати в зворотному порядку набір дійсних чисел, кількість яких заздалегідь не фіксована, а вводиться

Слайд 11Одномірні динамічні масиви
Оголошення одновимірних динамічних масивів (new )
Синтаксис: Тип * Ім’яМасива;
Приклад:
int

*a;
double *d;
Виділення пам'яті під одновимірний динамічний масив
Синтаксис:
Ім’яМасива = new

Тип [ВиразТипуКонстанти];
Приклад
int *mas;
mas = new int [100]; /*виділення динамічної пам’яті
розміром 100*sizeof(int) байтів*/
double *m = new double [n]; /* виділення динамічної пам’яті
розміром n*sizeof(double) байтов*/
long (*lm)[4];
lm = new long [2] [4]; /* виділення динамічної пам’яті
розміром 2*4*sizeof(long) байтов*/

Одномірні динамічні масивиОголошення одновимірних динамічних масивів (new )Синтаксис:		Тип * Ім’яМасива;Приклад:	int *a; 	double *d;Виділення пам'яті під одновимірний динамічний

Слайд 12Одномірні динамічні масиви
Оголошення одновимірних динамічних масивів (malloc (calloc) )
Синтаксис:
Ім’яМасива =

(Тип *) malloc(N*sizeof(Тип));
або
Ім’яМасива = (Тип *) calloc(N, sizeof(Тип));
Приклад
float *a;
a=(float *)malloc(10*sizeof(float));
//

або
a=(float *)calloc(10,sizeof(float));
/* виділення динамічної пам’яті розміром 10*sizeof(float) байтов*/

Одномірні динамічні масивиОголошення одновимірних динамічних масивів (malloc (calloc) )Синтаксис:Ім’яМасива = (Тип *) malloc(N*sizeof(Тип));абоІм’яМасива = (Тип *) calloc(N,

Слайд 13Звільнення пам'яті, виділеної під одновимірний динамічний масив
1) за допомогою операції

delete
Синтаксис: delete [] Ім’яМасива;
delete [] mas;
delete [] m;
delete [] lm;
2) за

допомогою бібліотечної функції free
Синтаксис: free (Ім’яМасива);
free (a);
Звільнення пам'яті, виділеної під одновимірний динамічний масив1) за допомогою операції deleteСинтаксис:		delete [] Ім’яМасива;delete [] mas;delete [] m;delete

Слайд 14Звернення до елементів одновимірного динамічного масиву
Синтаксис:
Ім’яМасива[ВиразТипуКонстанти];
або
Ім’яМасива[ЗначенняІндекса];
Приклад:
mas[5] – індекс задаєтся як константа,
sl[i] –  індекс задаєтся як

 змінна,
array[4*p] –  індекс задаєтся як как выраз.

Звернення до елементів одновимірного динамічного масивуСинтаксис:Ім’яМасива[ВиразТипуКонстанти];абоІм’яМасива[ЗначенняІндекса];Приклад:mas[5] – індекс задаєтся як константа,sl[i] –  індекс задаєтся як  змінна,array[4*p] –  індекс задаєтся як как выраз.

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика