Справочник по C/C++
Функции динамического выделения памяти

В этой главе описаны функции динамического выделения памяти C/C++. Самыми популярными из них являются malloc() и free(). При каждом вызове функции malloc() системой выделяется некоторая порция свободной памяти. При каждом вызове функции free() определенная порция памяти возвращается системе. Область свободной памяти, которая расходуется для удовлетворения запросов, называется кучей. Для программ на языке С прототипы функций динамического выделения памяти находятся в заголовке <stdlib.h>, а программы на языке C++ должны использовать заголовок <cstdlib>. В этой главе для простоты изложения употребляются имена С-заголовков, но ссылки на заголовок <stdlib.h> в соответствующей среде нужно заменить ссылками на заголовок <cstdlib>.

Все компиляторы C/C++ должны включать по крайней мере следующие четыре функции динамического выделения памяти: calloc(), malloc(), free() и realloc(). Однако ваш компилятор почти наверняка содержит несколько версий этих функций, в которых учтены различные возможности и особенности среды. Поэтому вам стоит обратиться к документации на используемый вами компилятор.

Несмотря на то что язык C++ поддерживает описываемые здесь функции динамического выделения памяти, они обычно не используются в С++-программах. Дело в том, что в языке C++ предусмотрены специальные операторы динамического выделения памяти new и delete, использование которых дает ряд преимуществ. Во-первых, оператор new автоматически выделяет корректный объем памяти для данных конкретного типа. Во-вторых, он возвращает корректный тип указателя на эту память. В-третьих, операторы new и delete можно перегружать. Поскольку операторы new и delete имеют преимущества перед функциями динамического выделения памяти, именно их рекомендуется использовать в программах на языке C++.


Смотрите также

Операторы new и delete
calloc — Выделяет память для массива содержащего определённое количество объектов
free — Возвращает куче память, адресуемую заданным указателем
malloc — Возвращает указатель на первый байт области памяти, которая была выделена из кучи
realloc — Изменяет размер ранее выделенной памяти, адресуемой параметром, в соответствии с заданным размером