Malloc в C

Malloc в C Программирование и разработка

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

В языке программирования C, когда мы говорим об управлении динамической памятью, используются следующие четыре функции: malloc (), calloc (), realloc () и free (). Однако объем сегодняшней статьи ограничен функцией malloc () в языке C, что означает «выделение памяти». Мы рассмотрим его использование и попытаемся обосновать, зачем нам вообще нужна эта функция. Наконец, мы завершим нашу статью, проведя вас через пример использования функции malloc () в языке программирования C.

Использование и необходимость использования «malloc» в C

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

Функция malloc () — это такая функция в языке программирования C, которая назначает один блок запрошенной памяти. Он является частью библиотеки «stdlib.h» в C. Его общее объявление выглядит следующим образом:

pointer=(typecast*)malloc(bytesize)

Как видно из объявления функции, она выделяет указанный размер неинициализированной памяти. Память инициализируется во время выполнения, что означает, что указатель указывает только на первый блок указанной памяти перед выполнением. Другими словами, мы можем сказать, что дополнительное пространство не резервируется до тех пор, пока ваша программа не будет выполнена. «Тип приведения», используемый в объявлении, предназначен для указания типа данных, на которые указывает указатель.

Таким образом, использование функции malloc () в C может очень удобно выполнять динамическое распределение памяти. Мы рассмотрим пример, который продемонстрирует, как эту функцию можно использовать в языке программирования C. Еще одна важная вещь, которую мы хотим здесь выделить, — это то, что функция malloc () (на самом деле, функции realloc () и calloc () также используются вместе с функцией free (). Это потому, что, используя эти функции, мы обрабатываем выделение памяти вручную. Следовательно, как только выполнение завершится, нам придется освободить память вручную. В противном случае он останется зарезервированным, и в будущем вам может не хватить места.

Читайте также:  Python нарезает многомерные массивы

Пример использования malloc в C

Для использования функции malloc () в C мы разработали очень простой пример, в котором мы хотели распечатать значения массива, которые выделяются динамически. Для этого мы создали файл на языке C с именем malloc.c. В этом файле у нас есть программа на языке C, в которую сначала включены две необходимые библиотеки. После этого мы создали нашу функцию «main ()». Эта функция начинается с создания указателя целочисленного типа. Мы только объявили этот указатель на этом этапе.

Затем мы хотели присвоить этому указателю значение. Мы хотели, чтобы этот указатель указывал на первый индекс целочисленного массива, значения которого будут распределяться динамически. Вот почему наш тип приведения — «int *». Мы хотели, чтобы этот массив содержал 5 целочисленных значений. Вот почему мы умножили наш размер в байтах на 5. Вы можете иметь любое значение здесь или даже принимать это значение как ввод от пользователя.

 

После выполнения этого динамического распределения памяти у нас есть оператор

После выполнения этого динамического распределения памяти у нас есть оператор «if», чтобы проверить, является ли значение нашего указателя NULL, чтобы он мог распечатать сообщение об ошибке и выйти. Однако, если значение нашего указателя не равно NULL, тогда наш код перейдет к оператору «else», в котором мы сначала напечатали сообщение об успешном завершении.

Затем у нас есть цикл «for», в котором мы присваиваем значения нашему динамически распределенному массиву. В следующем цикле for мы печатаем те значения, которые только что присвоили нашему массиву. Наконец, за пределами «else» части нашего кода мы освобождаем нашу динамически выделяемую память с помощью функции free ().

После сохранения этого кода мы скомпилировали его с помощью следующей команды:

$ gcc malloc.c –o malloc

После успешной компиляции кода мы выполнили его объектный файл с помощью команды, показанной ниже:

$ ./malloc

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

олее того, значения, присвоенные различным индексам нашего массива в результате распределения динамической памяти

Заключение

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

Оцените статью
bestprogrammer.ru
Добавить комментарий