Interested Article - Динамическое распределение памяти

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

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

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

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

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

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

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

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

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

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

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

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

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

  • New
  • Dispose

См. также

Источники

  • (англ.) . — Описание функции malloc в стандарте POSIX. 18 мая 2012 года.
  • (англ.) . — Описание функции calloc в стандарте POSIX. 18 мая 2012 года.
Источник —

Same as Динамическое распределение памяти