При программировании необходимо хранить данные. Данные хранятся в памяти. Эти области памяти известны как переменные. Каждая переменная имеет определенный тип. Они могут быть целыми числами, числами с плавающей запятой, двойными числами, символами и т. Д. Существуют также структуры данных, которые могут хранить последовательную коллекцию элементов одного типа с фиксированным размером. Это массив. Программист должен объявить размер массива. Если программист объявляет массив целых чисел для пяти элементов, невозможно присвоить значение индексу, превышающему заявленный размер. Распределение памяти является фиксированным и не может быть изменено во время выполнения. Другой метод выделения памяти - динамическое выделение памяти. Динамическое распределение памяти помогает выделить больше памяти при необходимости и освободить при необходимости. Заголовочный файл имеет четыре функции для динамического выделения памяти. calloc и malloc - две такие функции. ключевое отличие между calloc и malloc в том, что calloc выделяет память, а также инициализирует выделенные блоки памяти нулями, тогда как malloc выделяет память, но не инициализирует выделенную память нулями. Доступ к содержимому в calloc даст ноль, а malloc даст мусорное значение.
1. Обзор и основные отличия
2. Что такое каллок
3. Что такое malloc
4. Сходства между calloc и malloc
5. Сравнение бок о бок - calloc против malloc в табличной форме
6. Резюме
Выделение памяти - это процесс выделения памяти для исполняемых программ. Иногда необходимо изменить размер памяти. Поэтому динамическое распределение памяти используется. Это делается с помощью указателей. Указатели являются ссылочными переменными, которые содержат адрес другой переменной.
Рисунок 01: Каллок и Маллок
calloc означает «непрерывное распределение». Он выделяет несколько блоков памяти с одинаковым размером. Синтаксис для calloc следующий. Требуется два аргумента. Это количество блоков и размер каждого блока. Функция calloc возвращает пустой указатель, поэтому оператор приведения используется для возврата типа указателя в соответствии с требуемым типом данных.
void * calloc (size_t num, size_t size);
См. Ниже простую программу на C.
#включают
#включают
int main ()
int ptr * = (int *) calloc (20, sizeof (int));
if (ptr == NULL)
printf («Память не выделена»);
еще
printf («Память выделена»);
вернуть 0;
В соответствии с вышеупомянутой программой выделяется непрерывный блок памяти, который может содержать 20 элементов. Каждый будет иметь размер целого числа. Sizeof (int) используется, потому что целочисленный тип варьируется от компилятора к компилятору.
Если выделение памяти прошло успешно, он вернет базовый адрес блока памяти. Это означает, что указатель ptr теперь указывает на базовый адрес этого блока памяти. Все выделенные регионы инициализируются нулями. Будет напечатано сообщение «Распределение памяти». Если выделение памяти не выполнено, возвращается нулевой указатель. Таким образом, он будет печатать память не выделяется сообщение.
Функция malloc используется для выделения необходимого количества байтов в памяти. Синтаксис для malloc следующий. Размер представляет требуемую память в байтах.
void * malloc (size_t_size);
Функция malloc возвращает пустой указатель, поэтому оператор приведения используется для возврата типа указателя в соответствии с требуемым типом данных.
См. Ниже простую программу на C с функцией malloc.
#включают
#включают
int main ()
int ptr * = (int *) malloc (10 * sizeof (int));
if (ptr == NULL)
printf («Память не выделена»);
еще
printf («Память выделена»);
вернуть 0;
Согласно вышеуказанной программе, блок памяти будет выделен. Указатель указывает на начальный адрес выделенной памяти. Возвращенный указатель преобразуется в целочисленный тип. Если память выделена, будет напечатано сообщение о выделенной памяти. Если память не выделена, возвращается нулевой указатель. Поэтому память не выделена, сообщение будет распечатано.
Каллок против Маллока | |
calloc - это функция для динамического выделения памяти в заголовочном файле stdlib.h языка C, которая выделяет определенное количество байтов и инициализирует их нулем.. | malloc - это функция для динамического выделения памяти в заголовочном файле stdlib.h языка C, которая выделяет определенное количество байтов. |
Смысл | |
Calloc означает непрерывное распределение. | malloc обозначает выделение памяти. |
Синтаксис | |
calloc использует синтаксис, аналогичный void * calloc (size_t_num, size_t size); | malloc использует синтаксис, аналогичный void * malloc (size_t_size);. |
Количество аргументов | |
Calloc принимает два аргумента. Это количество блоков и размер каждого блока. | malloc принимает один аргумент. Это количество байтов. |
скорость | |
calloc занимает немного больше времени, чем malloc. Это из-за дополнительного шага инициализации выделенной памяти на ноль. | malloc быстрее, чем calloc. |
В статическом распределении памяти, используемом массивами, память фиксируется. Если сохранено несколько элементов, то остальная часть памяти теряется. Это также может привести к ошибкам, когда выделенная память меньше требуемой памяти. Поэтому динамическое распределение памяти используется. В языке C calloc и malloc обеспечивают динамическое распределение памяти. Разница между calloc и malloc заключается в том, что calloc выделяет память, а также инициализирует выделенные блоки памяти нулями, в то время как malloc выделяет память, но не инициализирует блоки памяти нулями. Malloc принимает два аргумента, в то время как calloc принимает два аргумента.
Вы можете скачать PDF-версию этой статьи и использовать ее в автономном режиме согласно примечанию. Пожалуйста, загрузите PDF версию здесь: Разница между calloc и malloc
1.Кумар, Кришан. «Разница между Маллоком и Каллоком в Си» Cs-Fundamentals.com, Cs-Fundamentals.com. Доступна здесь
2. «С динамическим распределением памяти». Википедия, Фонд Викимедиа, 13 января 2018 г. Доступно здесь
3. «Calloc () против malloc ()». GeeksforGeeks, 14 июня 2017 года. Доступно здесь