MALLOC(3C)
НАЗВАНИЕ
malloc, free, realloc, calloc - управление памятью
СИНТАКСИС
char *malloc (size)
unsigned size;
void free (ptr)
char *ptr;
char *realloc (ptr, size)
char *ptr;
unsigned size;
char *calloc (nelem, elsize)
unsigned nelem, elsize;
ОПИСАНИЕ
Функции malloc и free предоставляют простой универсальный механизм выделения и освобождения памяти. Функция
malloc возвращает указатель на блок памяти размером не
менее size байт, который можно использовать в произвольных целях.
Аргументом функции free является указатель на блок памяти, предварительно выделенный с помощью функции
malloc; после выполнения free эта часть памяти может
быть выделена вновь, но ее содержимое теряется.
В случае выхода за границы блока, выделенного функцией
malloc, а также при вызове функции free с аргументом,
не являвшимся результатом malloc, эффект будет непредсказуемым.
Функция malloc выделяет память из первого достаточно
большого непрерывного блока свободной памяти, просматривая все блоки по циклу, начиная с последнего выделенного или освобожденного. Попутно смежные свободные блоки об единяются в один больший свободный блок. Если не
нашлось подходящего блока, то вызывается sbrk [см.
brk(2)], в результате чего сдвигается верхняя граница
сегмента данных программы.
Функция realloc изменяет размер блока, на который указывает аргумент ptr, до величины в size байт и возвращает указатель на (возможно перемещенный) блок. Часть
содержимого блока до наименьшего из нового и старого
размеров не изменяется. Если блок размером size байт не
удается разместить на прежнем месте, то вызывается
malloc для выделения блока нужного размера, после чего
данные из старого блока перемещаются на новое место.
Аргумент ptr функции realloc может указывать и на блок,
освобожденный после последнего обращения к функциям
malloc, realloc или calloc. Зная стратегию выделения
памяти, последовательные вызовы функций malloc, free и
realloc можно использовать для уплотнения памяти.
Функция calloc выделяет пространство для массива из nelem элементов, каждый размером elsize байт, и заполняет
массив нулями.
Границы выделяемых блоков памяти располагаются так,
чтобы обеспечить (быть может после преобразования типов
результирующих указателей) хранение произвольных об ектов.
СМ. ТАКЖЕ
brk(2), malloc(3X).
ДИАГНОСТИКА
Функции malloc, realloc и calloc возвращают пустой указатель NULL, если нет достаточного количества памяти
или если обнаруживается нарушение структуры блоков
(обычная причина такого нарушения - запись в память вне
выделенных границ). В подобной ситуации не гарантируется сохранение содержимого блока, на который указывает
аргумент ptr.
ПРИМЕЧАНИЯ
Когда захвачено много блоков памяти, время поиска свободного блока увеличивается. Если программа захватывает
память, но не освобождает ее, то каждое последующее успешное выделение памяти происходит медленнее. Чтобы
этого избежать, можно использовать более гибкую реализацию, см. malloc(3X).