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