Прежде чем изучать разницу между malloc и calloc, давайте узнаем:
Что такое динамическое распределение памяти?
Распределение динамической памяти - это процесс выделения памяти во время выполнения. Существует четыре библиотечные подпрограммы: calloc (), free (), realloc () и malloc (), которые можно использовать для выделения памяти и ее освобождения во время выполнения программы. Эти процедуры определены в заголовочном файле stdlib.h.
Что такое malloc ()?
Это функция, которая используется для динамического выделения блока памяти. Он резервирует пространство памяти указанного размера и возвращает нулевой указатель, указывающий на ячейку памяти.
Возвращаемый указатель обычно имеет тип void. Это означает, что мы можем назначить функцию malloc любому указателю. Полная форма malloc - это выделение памяти.
В этом руководстве вы узнаете:
- Что такое динамическое распределение памяти?
- Что такое malloc ()?
- Что такое calloc ()?
- Зачем использовать malloc ()?
- Зачем использовать calloc ()?
- Синтаксис malloc ()
- Синтаксис calloc ()
- Пример malloc () в C
- Пример calloc () в C
- Разница между calloc () и malloc ()
Что такое calloc ()?
Функция Calloc () используется для выделения нескольких блоков памяти. Это функция динамического распределения памяти, которая используется для выделения памяти сложным структурам данных, таким как массивы и структуры. Если этой функции не удается выделить достаточно места, как указано, она возвращает нулевой указатель. Полная форма функции calloc - это непрерывное выделение памяти.
Зачем использовать malloc ()?
Вот причины использования malloc ()
- Вы должны использовать malloc (), когда вам нужно выделить память во время выполнения.
- Вы должны использовать malloc, когда вам нужно выделить объекты, которые должны существовать за пределами выполнения текущего блока памяти.
- Используйте malloc (), если вам нужно выделить память больше, чем размер этого стека.
- Он возвращает указатель на первый байт выделенного пространства.
- Это позволяет разработчикам выделять память по мере необходимости в точном количестве.
- Эта функция выделяет размер блока памяти в байтах из кучи.
Зачем использовать calloc ()?
Вот причины использования calloc ()
- Когда вам нужно обнулить выделенную память.
- Вы можете использовать calloc, который возвращает указатель, чтобы получить доступ к куче памяти.
- Используется, когда вам нужно инициализировать элементы до нуля, чтобы вернуть указатель на память.
- Чтобы предотвратить переполнение, которое возможно с помощью malloc ()
- Используйте calloc (), чтобы запросить страницу, которая, как известно, уже обнулена.
Синтаксис malloc ()
Вот синтаксис malloc ()
ptr = (cast_type *) malloc (byte_size);
В приведенном выше синтаксисе ptr - это указатель на cast_type. Функция malloc возвращает указатель на выделенную память byte_size.
Example: ptr = (int *) malloc (50)
При успешном выполнении этого оператора зарезервировано пространство памяти размером 50 байт. Адрес первого байта зарезервированного пространства присваивается указателю «ptr» типа int.
Синтаксис calloc ()
Вот синтаксис malloc ()
ptr = (cast_type *) calloc (n, size);
Приведенный выше синтаксис используется для выделения n блоков памяти одинакового размера. После выделения пространства памяти все байты инициализируются нулями. Возвращается указатель, который в настоящее время находится на первом байте выделенного пространства памяти.
Пример malloc () в C
В приведенном ниже коде sizeof (* ptr) используется для выделения блока памяти из 15 целых чисел. В операторе printf мы находим значение 6-го целого числа.
#include#include int main(){int *ptr;ptr = malloc(15 * sizeof(*ptr));if (ptr != NULL) {*(ptr + 5) = 480;printf("Value of the 6th integer is %d",*(ptr + 5));}}
Выход:
Значение шестого целого числа 480
Пример calloc () в C
Программа на языке C ниже вычисляет сумму первых десяти членов. Если значение указателя равно null, то пространство памяти не выделяется.
Цикл For используется для перебора значения переменной «i» и вывода суммы. Наконец, функция free используется для освобождения указателя.
#include#include int main() {int i, * ptr, sum = 0;ptr = calloc(10, sizeof(int));if (ptr == NULL) {printf("Error! memory not allocated.");exit(0);}printf("Building and calculating the sequence sum of the first 10 terms \n");for (i = 0; i < 10; ++i) { * (ptr + i) = i;sum += * (ptr + i);}printf("Sum = %d", sum);free(ptr);return 0;}
Выход:
Построение и вычисление суммы последовательности первых 10 слагаемых n Sum = 45
Разница между calloc () и malloc ()
Вот важное различие между malloc () и calloc ():
malloc () | calloc () |
Функция Malloc () создаст единый блок памяти размера, указанного пользователем. | Функция Calloc () может назначать несколько блоков памяти для переменной. |
Функция Malloc содержит мусорное значение. | Блок памяти, выделенный функцией calloc, всегда инициализируется нулем. |
Количество аргументов - 2. | Количество аргументов - 1. |
Calloc работает медленнее, чем malloc. | Маллок быстрее каллока. |
Это небезопасно по сравнению с calloc. | Он безопасен в использовании по сравнению с malloc. |
Эффективность по времени выше, чем у calloc (). | Временная эффективность ниже, чем у malloc (). |
Функция Malloc () возвращает только начальный адрес и не обнуляет его. | Перед назначением адреса функция Calloc () возвращает начальный адрес и обнуляет его. |
Он не выполняет инициализацию памяти. | Выполняет инициализацию памяти. |
КЛЮЧЕВЫЕ ОТЛИЧИЯ:
- Функция malloc () возвращает только начальный адрес и не обнуляет его, с другой стороны, функция calloc () возвращает начальный адрес и делает его нулевым.
- В функции malloc количество аргументов равно 2, а в функции calloc количество аргументов равно 1.
- Эффективность времени malloc () выше, чем calloc (), тогда как malloc () небезопасна по сравнению с calloc ()
- malloc не инициализирует память, тогда как calloc выполняет инициализацию памяти.