Для глобальных переменных отводится фиксированное место в памяти на все время работы программы, локальные переменные хранятся в стеке. Между ними находится область свободной памяти для динамического распределения. Используя механизм динамического распределения памяти, можно многократно выделять и освобождать области памяти в процессе работы программы.
В языке Си для динамического выделения памяти под переменную и освобождения памяти из-под ненужной переменной служат соответственно функции malloc() и free().
В языке Си++ предусмотрены две операции – new и delete, которые мы и рассмотрим.
Операция new выделяет необходимое количество байт или место для переменной в соответствующей области памяти и возвращает адрес выделенного места. Если по каким-либо причинам память не может быть выделена, операция new возвращает нулевой указатель. Операция delete освобождает соответствующую память.
Можно выделить динамически память под объект любого определенного к данному моменту типа. Динамически выделять память под простые переменные невыгодно, так как память расходуется не только под переменные, но и под информацию о выделении памяти. Динамическое выделение памяти целесообразно для выделения памяти под большие объекты, особенно массивы неизвестного заранее размера.
|
|
Иллюстрация работы с динамически выделенной памятью под массив:
# include <iostream.h>
# include <conio.h>
Void main(void)
{int *p, i, size;
clrscr();
cout<<”Введите размер массива: ”;
cin>>size;
p=new int[size]; //Выделяем память под массив целых чисел
if (!p) cout<<"Недостаточно памяти";
Else
{
for (i=0; i<k; i++)
{p[i]=i;
cout<<p[i];}
Delete(p); //Освобождаем память
}
getche();
}