mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк 

Златоуст.Ru

 

 

MALLOC(3C)                                           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 выделяет пространство для массива из ne-
	lem элементов, каждый размером elsize байт, и заполняет
	массив нулями.

	Границы  выделяемых  блоков  памяти  располагаются так,
	чтобы обеспечить (быть может после преобразования типов
	результирующих указателей) хранение произвольных объек-
	тов.

СМ. ТАКЖЕ 
	brk(2), malloc(3X).

ДИАГНОСТИКА 
	Функции malloc, realloc и calloc возвращают пустой ука-
	затель NULL, если нет  достаточного  количества  памяти
	или  если  обнаруживается  нарушение  структуры  блоков
	(обычная причина такого нарушения - запись в память вне
	выделенных границ). В подобной ситуации не гарантирует-
	ся сохранение содержимого блока, на  который  указывает
	аргумент ptr.

ПРИМЕЧАНИЯ 
	Когда  захвачено много блоков памяти, время поиска сво-
	бодного блока увеличивается. Если программа захватывает
	память, но не освобождает ее, то каждое последующее ус-
	пешное выделение  памяти  происходит  медленнее.  Чтобы
	этого  избежать, можно использовать более гибкую реали-
	зацию, см. malloc(3X).




MALLOC(3X)                                           MALLOC(3X)

НАЗВАНИЕ 
	malloc, free,  realloc,   calloc,    mallopt,  mallinfo
	- быстрое выделение оперативной памяти

СИНТАКСИС 
        #include 
        
        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;
        
        int mallopt (cmd, value)
        int cmd, value;
        
        struct mallinfo mallinfo ( )

ОПИСАНИЕ 
	Функции malloc и free предоставляют простой универсаль-
	ный  механизм выделения и освобождения памяти, работаю-
	щий значительно быстрее пакета malloc(3C).  Описываемые
	функции  находятся  в  библиотеке malloc и подключаются
	при использовании опции -lmalloc команд cc(1) и ld(1).

	Функция malloc возвращает указатель на блок размером не
	менее size байт, который можно  использовать  в  произ-
	вольных целях.

	Аргументом функции free  является  указатель  на  блок,
	предварительно  выделенный  с помощью malloc; после вы-
	полнения free блок может быть выделен вновь, а храняща-
	яся в нем  информация  теряется  (см.  однако  описание
	функции mallopt, команда M_KEEP).

	В случае выхода за границы блока, выделенного  функцией
	malloc,  а  также при вызове функции free с аргументом,
	не являвшимся результатом malloc, эффект будет  непред-
	сказуем.

	Функция realloc изменяет размер блока, на который  ука-
	зывает  ptr,  до размера size и возвращает указатель на
	возможно смещенный блок. Часть содержимого блока до на-
	именьшего из нового и старого размеров не изменяется.

	Функция calloc выделяет пространство для массива из ne-
	lem элементов, каждый размером elsize байт, и заполняет
	массив нулями.

	С  помощью функции mallopt  можно управлять алгоритмами
	выделения и освобождения памяти. Допускаются  следующие
	значения аргумента cmd:

	M_MXFAST 
	     Установить величину maxfast равной  аргументу  va-
	     lue.  Алгоритм  отводит  место  сразу  для большой
	     группы блоков, размер которых не превосходит  max-
	     fast,  а затем по запросам очень быстро выдает их.
	     Подразумеваемое значение maxfast равно 24.

	M_NLBLKS 
	     Установить величину numblks равной  аргументу  va-
	     lue.  Каждая из вышеупомянутых "больших групп" со-
	     держит numblks блоков. Число  блоков  должно  быть
	     больше  0;  подразумеваемое значение numblks равно
	     100.

	M_GRAIN 
	     Установить  величину grain равной аргументу value.
	     Размеры всех блоков, не превосходящие maxfast, ок-
	     ругляются вверх до ближайшего кратного grain. Зна-
	     чение grain должно быть больше 0;  подразумеваемое
	     значение  таково,  чтобы обеспечить правильное вы-
	     равнивание по границе данных любого типа. При  из-
	     менении  grain аргумент value округляется вверх до
	     ближайшего кратного значения по умолчанию.

	M_KEEP 
	     Сохранить данные в освобождаемом блоке до  следую-
	     щих  вызовов  функций  malloc, realloc или calloc.
	     Эта  опция  предоставлена только для совместимости
	     со старой версией malloc; пользоваться ей не реко-
	     мендуется.

	Возможные значения аргумента cmd определены во включае-
	мом файле .

	Функцию mallopt можно вызывать несколько раз, но только
	до выделения первого маленького блока.

	Функция mallinfo выдает информацию об использовании па-
	мяти. Она возвращает структуру:

        struct mallinfo {
          int arena;    /* Общий размер выделенного пр-ва */
          int ordblks;  /* Число обычных блоков */
          int smblks;   /* Число маленьких блоков */
          int hblks;    /* Число захваченных блоков */
          int hblkhd;   /* Пр-во в заголовках захвач. блоков */
          int usmblks;  /* Пр-во в исп-мых маленьких блоках */
          int fsmblks;  /* Пр-во в своб. маленьких блоках */
          int uordblks; /* Пр-во в исп-мых обычных блоках */
          int fordblks; /* Пр-во в своб. обычных блоках */
          int keepcost; /* Плата за исп-ие опции сохранения */
        }

	Структура определена во включаемом файле .

	Каждая из функций выделения возвращает указатель на об-
	ласть памяти, подходящую (после возможного преобразова-
	ния типа указателя) для хранения произвольных данных.

ФАЙЛЫ 
	/usr/lib/libmalloc.a

СМ. ТАКЖЕ 
	brk(2), malloc(3C).

ДИАГНОСТИКА 
	Функции  malloc,  realloc  и  calloc  возвращают пустой
	указатель NULL, если нет достаточного количества  памя-
	ти.  Когда  realloc возвращает указатель NULL, то блок,
	на который указывает  ptr,  остается  неизменным.  Если
	функция  mallopt  вызывается после выделения памяти или
	ее аргументы cmd или value имеют недопустимые значения,
	то возвращается не ноль. В противном  случае  результат
	равен нулю.

ПРЕДОСТЕРЕЖЕНИЯ 
	По  сравнению  с  пакетом  malloc(3C) описанные функции
	расходуют память менее экономно.

	Размер программы также оказывается больше, чем при  ис-
	пользовании  malloc(3C).

	В отличие от malloc(3C) описанные функции не  обеспечи-
	вают сохранение информации в освобожденных блоках (если
	только не использовалась опция M_KEEP функции mallopt).

	Недокументированные особенности malloc(3C) не поддержи-
	ваются.



 

 

Бернадинер Марк Абрамович

Мое резюме

Компьютерная страничка

Ресурсы сети

Фотоальбом

 

 

 

mark.zlatoust.ru Послать письмо Webmaster-у Web-Master © Бернадинер Марк