|
MALLOC(3C)НАЗВАНИЕ СИНТАКСИС 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; ОПИСАНИЕ Аргументом функции 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 байт, и заполняет массив нулями. Границы выделяемых блоков памяти располагаются так, чтобы обеспечить (быть может после преобразования типов результирующих указателей) хранение произвольных об ектов. СМ. ТАКЖЕ ДИАГНОСТИКА ПРИМЕЧАНИЯ |
|