Files
freeCodeCamp/guide/russian/c/malloc/index.md
2019-08-07 15:05:56 -07:00

3.5 KiB
Raw Blame History

title, localeTitle
title localeTitle
malloc malloc

malloc в C

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

malloc() является частью stdlib.h и для его использования вам необходимо подключить #include <stdlib.h> .

Использование malloc

malloc() выделяет память запрошенного размера и возвращает указатель на начало выделенного блока. Чтобы запомнить этот возвращенный указатель, мы должны создать переменную. Давайте создадим указатель на пока не существующий массив целых чисел (тип int).

int* arrayPtr; 

Результат malloc будет автоматически приведен к используемому нами типу указателя. В отличие от других языков, C не знает тип данных, на который он выделяет память; malloc знает лишь количество байт, который необходимо выделить. К счастью, в C есть функция sizeof(), которая может нам помочь.

arrayPtr = malloc(10 * sizeof(int)); 

Этот оператор использует malloc для выделения памяти для массива из 10 целых чисел. Поскольку размеры могут различаться на разных компьютерах, важно использовать функцию sizeof() для вычисления размера на текущем компьютере.

Память, выделенная во время выполнения программы, должна быть освобождена до ее закрытия. Чтобы освободить память, используется функция free()

free( arrayPtr ); 

Этот оператор освободит ранее выделенную память. В C нет встроенного сборщика мусора, как в некоторых других языках, напр. в Java. В результате память, которая не была должным образом освобождена, будет оставаться выделенной после закрытия программы.

Прежде чем продолжить ...

Обзор

  • malloc используется для динамического выделения памяти и полезен, когда вы во время компиляции не знаете объем памяти, который будет необходим.
  • Выделение памяти позволяет объектам существовать за пределами текущего блока.
  • C передает значение вместо ссылки. Использование malloc для назначения памяти с последующей передачей указателя в другую функцию более эффективно нежели воссоздание этой структуры в самой функции.