malloc() и calloc():основные различия объясняются примерами
Прежде чем изучать разницу между 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<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-го целого числа равно 480
Пример 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
Разница между calloc() и malloc()
Вот важное различие между malloc() и calloc():
маллок() вызов() Функция Malloc() создаст один блок памяти размера, указанного пользователем. Функция Calloc() может назначить несколько блоков памяти для переменной. Функция Malloc содержит значение мусора. Блок памяти, выделенный функцией calloc, всегда инициализируется для ноль. Количество аргументов равно 1. Количество аргументов равно 2. Calloc медленнее, чем malloc. Malloc быстрее, чем calloc. Это небезопасно по сравнению с calloc. Это безопасно в использовании по сравнению с malloc. ().Эффективность времени ниже, чем у malloc(). Функция Malloc() возвращает только начальный адрес и не делает его равным нулю. Перед выделением адреса функция Calloc() возвращает начальный адрес и делает его равным нулю. Она не выполняет инициализацию памяти. Он выполняет инициализацию памяти.КЛЮЧЕВЫЕ ОТЛИЧИЯ:
- Функция malloc() возвращает только начальный адрес и не обнуляет его, с другой стороны, функция calloc() возвращает начальный адрес и обнуляет его.
- В функции malloc количество аргументов равно 1, а в функции calloc количество аргументов равно 2.
- эффективность использования времени malloc() выше, чем calloc(), тогда как malloc() не является безопасным по сравнению с calloc()
- malloc не инициализирует память, тогда как calloc выполняет инициализацию памяти.
Язык C
- Выражения, операторы и блоки C# (с примерами)
- Цикл C++ do…while с примерами
- Указатели C++ с примерами
- Тип данных Char C++ с примерами
- Перегрузка оператора C++ с примерами
- Функции C++ с примерами программ
- Учебное пособие по коллекциям C# с примерами
- Разница между while и do-while:объяснение с примерами
- Функция calloc() в библиотеке C с программой ПРИМЕР
- Количество строк Python() с ПРИМЕРАМИ