#c #memory #dynamic #heap-memory #new-operator
Вопрос:
Массив, созданный таким образом int a[5]
, содержит 5 целых блоков памяти, и память не может быть изменена во время выполнения. Массив, созданный таким образом int *ptr=new int[5]
, также содержит 5 целых блоков, и в этом случае память также не может быть увеличена и уменьшена во время выполнения, поэтому с этой точки зрения она называется динамической памятью.
Комментарии:
1. Он не изменяет размер динамически. Он выделяется динамически. То, что вы описываете («не может быть увеличено и уменьшено»), является свойством массивов , а не памятью, в которой находятся массивы.
2. Кроме того,. in
new int[5]
—5
не обязательно должно быть известно во время компиляции. Его также можно прочитать во время выполнения:int a; std::cin >> a; int* ptr = new int[a];
. Вы не можете сделать то же самое сint a[5]
;.
Ответ №1:
Разговорный термин «динамическая память» происходит от определяемого языком термина «длительность динамического хранения». См. раздел Продолжительность хранения :
продолжительность динамического хранения. Хранилище для объекта выделяется и освобождается по запросу с помощью функций динамического выделения памяти. Дополнительные сведения об инициализации объектов с таким сроком хранения см. в разделе Новое выражение.
Объекты, созданные с new
помощью или new[]
и уничтоженные с delete
помощью или delete[]
, имеют динамическую продолжительность хранения.
Он динамичен, потому что время жизни начинается и заканчивается всякий раз, когда разработчик этого хочет. У любой другой продолжительности хранения есть строгие правила о том, когда начинается срок службы и когда он заканчивается. Это не имеет никакого отношения к размерам массивов или изменению размеров массивов. Объекты, не являющиеся массивами, также могут иметь динамическую продолжительность хранения.
Ответ №2:
Рассмотрим следующий случай
#include <iostream>
int main()
{
int size;
std::cin>>size;
int array1[size]; //compile error, the size of static array must be known at compile time
int* parr=new int[size]; //ok, size of an dynamic array can be unveiled on runtime.
....
....
}
Таким образом, динамический термин относится к тому факту, что пользователь может определять размер массива в любое время, когда он/она захочет.
Комментарии:
1.
new int;
также является динамической памятью, даже несмотря на отсутствие размера.