[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Управление памятью

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

free(3)   освобождает блок  памяти  по  указателю  ptr  и  делает  его
          доступным для последующих выделений. ptr должен указывать на
          блок, ранее  полученный  вызовом  malloc(3),  calloc(3)  или
          realloc(3).

realloc(3) делает  размер блока  по указателю ptr равным size байтов и
          возвращает  указатель  на  блок,  возможно  перемещенный.  В
          случае  перемещения   блока  данные   из   исходного   блока
          копируются в новый блок.
          Замечание:  realloc(3)   в  случае  перемещения  освобождает
          исходный блок.

calloc(3) выделяет блок,  который  вмещает  nelem  элементов  размером
          elsize байтов каждый, и возвращает его указатель. Выделенный
          блок памяти инициализируются нулями.

Эти функции управления памятью используют brk(2) и sbrk(2). Когда
функциям malloc(3), calloc(3) или realloc(3) нужно изменить границу
выделяемой памяти, они обычно делают это с запасом. Если будущим
запросам хватает уже выделенного пространства, они не используют
системный вызов. Так библиотечные функции минимизируют число
использований нижележащих системных вызовов.
У каждого блока памяти есть байты, где хранится длина блока и признак
того, занят он или свободен. Функция free(3) никогда не возвращает
память назад ядру. Вместо этого она устанавливает признак того, что
блок свободен. Будущие запросы выделения памяти ищут среди всех
свободных блоков блок подходящего размера, прежде чем вызывать
системный вызов увеличения памяти. Смежные свободные блоки сливаются
во время поиска для их более эффективного переиспользования.
Предупреждение: Не используйте вместе библиотечную функцию
malloc(3C/3X) и системный вызов brk(2) в одной и той же программе.
sbrk(2) используйте только для получения значения границы выделяемой
памяти.
Как часть ОС UNIX System V Версия 2, функции malloc(3), free(3),
realloc(3) или calloc(3) являются частью секции (3C) и секции (3X).
Функции секции (3X) обеспечивают такие же функциональные возможности,
что и функции секции (3C), но исполняются значительно быстрее. Размер
кода у функций из (3X) больше, чем у функций из (3C). Две добавочные
функции включены в страницу Руководства  MALLOC(3C). memalign(3C) и
valloc(3C) выделяют байты в особом режиме выравнивания границ. Две
добавочные функции включены в страницу Руководства MALLOC(3X).
mallopt(3X) обеспечивает точную настройку под алгоритм выделения, а
mallinfo(3X) информирует об использовании памяти. Чтобы использовать
функции MALLOC(3X), ваша программа должна быть скомпилирована вместе с
архивной библиотекой /lib/libmalloc.a. Для этого добавьте опцию -
lmalloc в конец командной строки cc(1). По умолчанию, подсоединяются
функции из разделяемой библиотеки /usr/ccs/lib/libc/so.
                          УПРАВЛЕНИЕ ПАМЯТЬЮ
malloc(3)

ИМЯ

    malloc, free, realloc, calloc - управляют памятью

ИСПОЛЬЗОВАНИЕ

    #include <stdlib.h>

    void *malloc (size_t size);
    void free (void *ptr);

    void *realloc (void *ptr, size_t size);

    void *calloc (size_t nelem, size_t elsize);

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

    успех - указатель на блок памяти

    неуспех - NULL-указатель
                         malloc(3) - Примеры

В первом примере демонстрируется динамическое размещение целого числа.
Во втором примере - структуры узла node.