По теме лабораторной работы. Принятое распределение памяти в языке Си/С++ следующее

Принятое распределение памяти в языке Си/С++ следующее:

Стек
Свободная память
Раздел глобальных Переменных и констант
Код программы

Верхние адреса

Нижние адреса

Для глобальных переменных отводится фиксированное место в памяти на все время работы программы. Локальные переменные хранятся в стеке. Между ними находится область свободной памяти для динамического распределения. Наиболее важными операциями для динамического распределения памяти являются new, new [], delete, delete []. Они используются для динамического распределения свободной памяти. Операции new и new [] выделяют память, а операции delete и delete [] освобождает ее.

Две операции new предназначены для выделения участков свободной памяти и размещения в них переменных, а в случае new [] – массивов. Продолжительность существования созданных таким образом (динамических) переменных – от точки создания до конца программы или до явного освобождения соответствующего участка памяти применением операций delete (delete [] – для удаления массивов).

Первая из рассмотренных операций предназначена для размещения в динамической памяти переменной заданного аргументом типа (кроме типов массивов) и имеет следующий вид: new имя_типа или new имя_типа (выражение).

Вторая форма вызова помимо выделения памяти осуществляет ее инициализацию значением выражения. В обоих случаях результат операции имеет тип указателя того же типа, что и аргумент, т.е. имя_типа*, и значение адреса размещенной динамической переменной. Это значение нужно сохранить в какой-либо переменной-указателе, что обеспечит в дальнейшем доступ к динамической переменной по адресу.

Операции new возвращают адрес выделенного участка памяти или, если запрашиваемой памяти нет, NULL.

Приведем пример создания и использования двух динамических переменных:

int *i, *j;

i= new int;

j= new int (5);

*i= (*j) * (*j); // *i=25

Динамическое распределение памяти удобно использовать тогда, когда заранее неизвестно количество используемых переменных. В частности, этот механизм используется для создания динамических массивов, т.е. массивов с изменяемым количеством элементов.

Для размещения динамических массивов предусмотрена специальная операция new [], вызываемая следующим образом: new тип_элемента [].

Заметим, что не предусмотрено средств для инициализации динамических массивов.

Преимущество динамических массивов состоит в том, что размерность может быть переменной, т.е. объем памяти, выделяемой под массив, определяется на этапе выполнения программы. Например:

int n;

double *p;

………

cin >> n;

p= new double [n];

Доступ к элементам динамического массива осуществляется точно также, как к статическим, например, к 5-му элементу приведенного выше массива можно обратиться как p[4] или *(р+4).

После того как отпала необходимость в динамической переменной, ее можно удалить, освободив используемую ею память для других целей. Например, созданные ранее переменные уничтожаются следующим образом:

delete i;

delete j;

delete [] p;

Аргументами обеих операций delete служат указатели, значения которых были получены операциями new при размещении соответствующих динамических переменных.

Желательным является использование операций delete, соответствующих каждой вызванной программой new.

Приведем несколько примеров использования динамических массивов.

Пример: Вычислить сумму S = S a(i) * b(i), i=1,2,…,n, где n – задается в процессе выполнения программы.

# include <iostream.h>

# include <stdlib.h>

void main ()

{ int n,i;

double *pa, *pb, s;

cout << “ Размер массивов: ”);

cin >> n;

pa = new double [n];

if (pa ==NULL) { cout << “ Недостаточно памяти для массива. \ n”);

return;

}

printf (“ Ввод массива А \ n”);

for (i=0; i<n; i++)

cin >> pa[i];

pb = new double [n];;

if (pb ==NULL) { cout << “ Недостаточно памяти для массива. \n ”;

return;

}

cout << “ Ввод массива B \n”;

for (i=0; i<n; i++)

cin >> pb[i];

s=0;

for (i=0; i<n; i++)

s+= pa[i] * pb[i];

cout << “ s = ” << s;

delete [] pa; delete [] pb;

}

По результатам сессии в деканате имеется список задолжников, т.е. студентов, имеющих неудовлетворительные оценки по экзаменам, зачетам, курсовым проектам и работам.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: