Динамическое распределение памяти
Динамическое распределение памяти — способ выделения оперативной памяти компьютера для объектов в программе, при котором выделение памяти под объект осуществляется во время выполнения программы.
При динамическом распределении памяти объекты размещаются в т.н. «куче» (англ. 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
См. также
Источники
- [www.opengroup.org/onlinepubs/009695399/functions/malloc.html malloc] (англ.). — Описание функции malloc в стандарте POSIX. [www.webcitation.org/67lLvV8r7 Архивировано из первоисточника 19 мая 2012].
- [www.opengroup.org/onlinepubs/009695399/functions/calloc.html calloc] (англ.). — Описание функции calloc в стандарте POSIX. [www.webcitation.org/67lLw3l3K Архивировано из первоисточника 19 мая 2012].
Это заготовка статьи о программировании. Вы можете помочь проекту, дополнив её. |
<imagemap>: неверное или отсутствующее изображение |
Для улучшения этой статьи желательно?:
|
Напишите отзыв о статье "Динамическое распределение памяти"
Отрывок, характеризующий Динамическое распределение памяти
– Un conseil d'ami, mon cher. Decampez et au plutot, c'est tout ce que je vous dis. A bon entendeur salut! Прощайте, мой милый. Ах, да, – прокричал он ему из двери, – правда ли, что графиня попалась в лапки des saints peres de la Societe de Jesus? [Дружеский совет. Выбирайтесь скорее, вот что я вам скажу. Блажен, кто умеет слушаться!.. святых отцов Общества Иисусова?]Пьер ничего не ответил и, нахмуренный и сердитый, каким его никогда не видали, вышел от Растопчина.
Когда он приехал домой, уже смеркалось. Человек восемь разных людей побывало у него в этот вечер. Секретарь комитета, полковник его батальона, управляющий, дворецкий и разные просители. У всех были дела до Пьера, которые он должен был разрешить. Пьер ничего не понимал, не интересовался этими делами и давал на все вопросы только такие ответы, которые бы освободили его от этих людей. Наконец, оставшись один, он распечатал и прочел письмо жены.
«Они – солдаты на батарее, князь Андрей убит… старик… Простота есть покорность богу. Страдать надо… значение всего… сопрягать надо… жена идет замуж… Забыть и понять надо…» И он, подойдя к постели, не раздеваясь повалился на нее и тотчас же заснул.
Когда он проснулся на другой день утром, дворецкий пришел доложить, что от графа Растопчина пришел нарочно посланный полицейский чиновник – узнать, уехал ли или уезжает ли граф Безухов.
Человек десять разных людей, имеющих дело до Пьера, ждали его в гостиной. Пьер поспешно оделся, и, вместо того чтобы идти к тем, которые ожидали его, он пошел на заднее крыльцо и оттуда вышел в ворота.
С тех пор и до конца московского разорения никто из домашних Безуховых, несмотря на все поиски, не видал больше Пьера и не знал, где он находился.
Ростовы до 1 го сентября, то есть до кануна вступления неприятеля в Москву, оставались в городе.
После поступления Пети в полк казаков Оболенского и отъезда его в Белую Церковь, где формировался этот полк, на графиню нашел страх. Мысль о том, что оба ее сына находятся на войне, что оба они ушли из под ее крыла, что нынче или завтра каждый из них, а может быть, и оба вместе, как три сына одной ее знакомой, могут быть убиты, в первый раз теперь, в это лето, с жестокой ясностью пришла ей в голову. Она пыталась вытребовать к себе Николая, хотела сама ехать к Пете, определить его куда нибудь в Петербурге, но и то и другое оказывалось невозможным. Петя не мог быть возвращен иначе, как вместе с полком или посредством перевода в другой действующий полк. Николай находился где то в армии и после своего последнего письма, в котором подробно описывал свою встречу с княжной Марьей, не давал о себе слуха. Графиня не спала ночей и, когда засыпала, видела во сне убитых сыновей. После многих советов и переговоров граф придумал наконец средство для успокоения графини. Он перевел Петю из полка Оболенского в полк Безухова, который формировался под Москвою. Хотя Петя и оставался в военной службе, но при этом переводе графиня имела утешенье видеть хотя одного сына у себя под крылышком и надеялась устроить своего Петю так, чтобы больше не выпускать его и записывать всегда в такие места службы, где бы он никак не мог попасть в сражение. Пока один Nicolas был в опасности, графине казалось (и она даже каялась в этом), что она любит старшего больше всех остальных детей; но когда меньшой, шалун, дурно учившийся, все ломавший в доме и всем надоевший Петя, этот курносый Петя, с своими веселыми черными глазами, свежим румянцем и чуть пробивающимся пушком на щеках, попал туда, к этим большим, страшным, жестоким мужчинам, которые там что то сражаются и что то в этом находят радостного, – тогда матери показалось, что его то она любила больше, гораздо больше всех своих детей. Чем ближе подходило то время, когда должен был вернуться в Москву ожидаемый Петя, тем более увеличивалось беспокойство графини. Она думала уже, что никогда не дождется этого счастия. Присутствие не только Сони, но и любимой Наташи, даже мужа, раздражало графиню. «Что мне за дело до них, мне никого не нужно, кроме Пети!» – думала она.