Почему мы называем память, созданную с использованием ключевого слова «new», «динамической памятью», поскольку она также является фиксированной памятью

#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; также является динамической памятью, даже несмотря на отсутствие размера.