Изменения

Перейти к: навигация, поиск

Выполнение программы

132 байта добавлено, 02:03, 13 июля 2011
Архив
{{TODO|t=включить в главу про кучу}}
Динамическая память - это память, получающаяся из свободной памяти при выделении памяти. Слово "динамическая" здесь означает "динамически распределяемая". Динамическая память выделяется и освобождается функциями <tex>VirtualAlloc </tex> и <tex>VirtualFree</tex>. Вызывая <tex>VirtualAlloc</tex>, указывая размер блока памяти и желаемый атрибут доступа (обычно: чтение-запись). Система выделяет от свободной памяти блок. Теперь в программе выделена память, и есть указатель на нее. Когда память надо освободить - вызывайте <tex>VirtualFree</tex>. Система переведёт память обратно в свободную.
Чем плохо такое выделением памяти? Оно выделяет больше памяти, чем нужно, и происходит частое обращение к ядру. Для этого в языке c++ есть особенные функции, для работы с областью памяти - куча "heap".
В стандартной библиотеке, пришедшей из языка C, <tex>libc </tex> реализованы функции <tex>malloc() </tex> и <tex>free()</tex>, соответственно для выделения и освобождения памяти. В самом C++ есть аналогичные функции <tex>new (new[]) </tex> и <tex>delete(delete[])</tex>.
Для каждого <tex>malloc/new/new[] </tex> должны вызываться <tex>free/delete/delete[]</tex>, т.к. память сама не освобождается при выходе из функций, куча остается неосвобожденнной, и происходят утечки памяти.
{{TODO|t=запилить картиночки, поправить корявые фразочкиАлина}}
Рассмотрим процесс выделения памяти в куче на примере простой программы:
148
правок

Навигация