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

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

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

При динамическом распределении памяти объекты размещаются в т.н. «куче» (англ. 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.-->



Wikimedia Foundation. 2010.

Нужно сделать НИР?

Полезное


Смотреть что такое "Динамическое распределение памяти" в других словарях:

  • Динамическое распределение памяти — управление ресурсами памяти, предполагающее выделение, освобождение памяти во время выполнения программы. По английски: Dynamic allocation См. также: Распределение памяти Финансовый словарь Финам …   Финансовый словарь

  • динамическое распределение памяти — Распределение памяти во время исполнения программы по ее запросам. [http://www.morepc.ru/dict/] Тематики информационные технологии в целом EN dynamic memory allocation …   Справочник технического переводчика

  • динамическое распределение (памяти) — — [http://slovarionline.ru/anglo russkiy slovar neftegazovoy promyishlennosti/] Тематики нефтегазовая промышленность EN dynamic allocation …   Справочник технического переводчика

  • Менеджер памяти — Менеджер памяти  часть компьютерной программы (как прикладной, так и операционной системы), обрабатывающая запросы на выделение и освобождение оперативной памяти или (для некоторых архитектур ЭВМ) запросы на включение заданной области памяти …   Википедия

  • Операционная система реального времени — Запрос «ОСРВ» перенаправляется сюда; о советском клоне системы RSX 11 см. ОСРВ СМ ЭВМ. Операционная система реального времени, ОСРВ (англ. Real Time Operating System)  тип операционной системы. Есть много определений термина, по сути… …   Википедия

  • ОС РВ — Операционная система реального времени, ОСРВ (англ. Real Time Operating System) тип операционной системы. Есть много определений термина, по сути похожих друг на друга. Самые распространённые из них: Операционная система, в которой успешность… …   Википедия

  • ОС реального времени — Операционная система реального времени, ОСРВ (англ. Real Time Operating System) тип операционной системы. Есть много определений термина, по сути похожих друг на друга. Самые распространённые из них: Операционная система, в которой успешность… …   Википедия

  • ОСРВ — Операционная система реального времени, ОСРВ (англ. Real Time Operating System) тип операционной системы. Есть много определений термина, по сути похожих друг на друга. Самые распространённые из них: Операционная система, в которой успешность… …   Википедия

  • Операционные системы реального времени — Операционная система реального времени, ОСРВ (англ. Real Time Operating System) тип операционной системы. Есть много определений термина, по сути похожих друг на друга. Самые распространённые из них: Операционная система, в которой успешность… …   Википедия

  • Трейнер — Тренер, трейнер (англ. trainer)  программа, предназначенная для изменения поведения игры (например, делающие игрока бессмертным), обычно работающая непосредственно с оперативной памятью компьютера. В 1980 х и 1990 х годах трейнеры обычно… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»