Разница между malloc() и calloc()
Ключевые различия между malloc() и calloc()
- Функция malloc() возвращает только начальный адрес и не делает его нулевым, с другой стороны, функция calloc() возвращает начальный адрес и делает его нулевым.
- В функции malloc количество аргументов равно 1, а в функции calloc — 2.
- Эффективность использования времени malloc() выше, чем у calloc(), тогда как malloc() небезопасна по сравнению с calloc().
- malloc не инициализирует память, тогда как calloc выполняет инициализацию памяти.

Что такое динамическое распределение памяти?
Динамическое распределение памяти это процесс выделения памяти во время выполнения. Существует четыре библиотечных процедуры: calloc(), free(), realloc ()и malloc(), которые можно использовать для выделения памяти и ее освобождения во время выполнения программы. Эти процедуры определены в заголовочном файле stdlib.h.
Что такое malloc()?
Это функция, которая используется для динамического выделения блока памяти. Он резервирует пространство памяти указанного размера и возвращает нулевой указатель, указывающий на ячейку памяти.
Возвращаемый указатель обычно имеет тип void. Это означает, что мы можем назначить функцию malloc любому указателю. Полная форма malloc — выделение памяти.
Что такое calloc()?
Функция Calloc() используется для выделения нескольких блоков памяти. Это функция динамического выделения памяти, которая используется для выделения памяти для сложных структур данных, таких как массивы и структуры. Если этой функции не удается выделить достаточно места, как указано, она возвращает нулевой указатель. Полная форма функции calloc — это непрерывное выделение.
Разница между malloc() и calloc()
Вот важное различие между malloc() и calloc():
таНос () | calloc () |
---|---|
Функция Malloc() создаст один блок памяти размера, указанного пользователем. | Функция Calloc() может назначить переменной несколько блоков памяти. |
Функция Malloc содержит мусорное значение. | Блок памяти, выделенный функцией calloc, всегда инициализируется нулем. |
Число аргументов — 1. | Количество аргументов — 2. |
Calloc медленнее, чем malloc. | Malloc работает быстрее, чем calloc. |
Это небезопасно по сравнению с calloc. | Его использование безопасно по сравнению с malloc. |
Эффективность использования времени выше, чем у calloc(). | Эффективность использования времени ниже, чем у malloc(). |
Функция 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 мы находим значение шестого целого числа.
#include<stdlib.h> #include<stdio.h> 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)); } }
Вывод:
Значение шестого целого числа — 6.
Пример calloc() в C
Программа на языке C, приведенная ниже, вычисляет сумму первых десяти членов. Если значение указателя равно нулю, то пространство памяти не будет выделено.
Цикл for используется для перебора значения переменной «i» и вывода суммы. Наконец, функция free используется для освобождения указателя.
#include <stdio.h> #include <stdlib.h> 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
Зачем использовать malloc()?
Вот причины использования malloc()
- Вам следует использовать malloc(), когда вам нужно выделить память во время выполнения.
- Вам следует использовать malloc, когда вам нужно выделить объекты, которые должны существовать после выполнения текущего блока памяти.
- Используйте malloc(), если вам нужно выделить память, превышающую размер этого стека.
- Он возвращает указатель на первый байт выделенного пространства.
- Это позволяет разработчикам выделять память по мере необходимости и в точном объеме.
- Эта функция выделяет из кучи размер блока памяти в байтах.
Зачем использовать calloc()?
Вот причины использования calloc()
- Когда вам нужно установить выделенную память в ноль.
- Вы можете использовать calloc, который возвращает указатель для получения доступа к куче памяти.
- Используется, когда вам нужно инициализировать элементы нулем, чтобы вернуть указатель на память.
- Чтобы предотвратить переполнение, возможное с помощью malloc()
- Используйте calloc() для запроса страницы, которая, как известно, уже обнулена.