Ekb-oskab.ru

Прием лома металлов

Динамически распределяемая память

10-10-2023

Динамическое распределение памяти — способ выделения оперативной памяти компьютера для объектов в программе, при котором выделение памяти под объект осуществляется во время выполнения программы.

При динамическом распределении памяти объекты размещаются в т.н. «куче» (англ. heap): при конструировании объекта указывается размер запрашиваемой под объект памяти, и, в случае успеха, выделенная область памяти, условно говоря, «изымается» из «кучи», становясь недоступной при последующих операциях выделения памяти. Противоположная по смыслу операция — освобождение занятой ранее под какой-либо объект памяти: освобождаемая память, также условно говоря, возвращается в «кучу» и становится доступной при дальнейших операциях выделения памяти.

По мере создания в программе новых объектов, количество доступной памяти уменьшается. Отсюда вытекает необходимость постоянно освобождать ранее выделенную память. В идеальной ситуации программа должна полностью освободить всю память, которая потребовалась для работы. По аналогии с этим, каждая процедура (функция или подпрограмма) должна обеспечить освобождение всей памяти, выделенной в ходе выполнении процедуры. Некорректное распределение памяти приводит к т.н. «утечкам» памяти, когда выделенная память не освобождается. Многократные утечки памяти могут привести к исчерпанию всей оперативной памяти и нарушить работу операционной системы.

Другая проблема — это проблема фрагментации памяти. Выделение памяти происходит блоками — непрерывными фрагментами оперативной памяти (таким образом, каждый блок — это несколько идущих подряд байтов). В какой-то момент, в куче попросту может не оказаться блока подходящего размера и, даже, если свободная память достаточна для размещения объекта, операция выделения памяти окончится неудачей.

Для управления динамическим распределением памяти используется «сборщик мусора» — программный объект, который следит за выделением памяти и обеспечивает её своевременное освобождение. Сборщик мусора также следит за тем, чтобы свободные блоки имели максимальный размер, и, при необходимости, осуществляет дефрагментцию памяти.

Содержание

Элементы реализации

Язык программирования C (Си)

В языке программирования Си имеются следующие четыре функции для динамического распределения памяти, входящие в стандартную библиотеку:

  • malloc (от англ. memory allocation, выделение памяти),
  • calloc (от англ. clear allocation, чистое выделение памяти)
  • realloc (от англ. reallocation, перераспределение памяти).
  • free (англ. free, освободить)

Эти функции имеют следующие описания:

#include <stdlib.h>
 
void *malloc (size_t size);
void *calloc (size_t num, size_t size);
void *realloc(void *block, size_t size);
void free(void *block);

В C++ имеются два оператора:

Язык программирования Object Pascal

В Object Pascal имеются два оператора:

  • New
  • Dispose

См. также

Языки программирования

Стандарты

Библиотеки

Источники

  • malloc  (англ.). — Описание функции malloc в стандарте POSIX. Архивировано из первоисточника 19 мая 2012.
  • calloc  (англ.). — Описание функции calloc в стандарте POSIX. Архивировано из первоисточника 19 мая 2012.-->


Динамически распределяемая память.

© 2018–2023 ekb-oskab.ru, Россия, Челябинск, ул. Горького 53, +7 (351) 992-98-28