Рекомендуем, 2024

Выбор редакции

Разница между malloc и calloc

Принципиальное различие между функциями malloc и calloc состоит в том, что calloc () нуждается в двух аргументах вместо одного аргумента, который требуется для malloc () . И malloc (), и calloc () - это функции, которые язык программирования C обеспечивает для динамического выделения и удаления памяти во время выполнения.

Прежде чем разбираться в функциях malloc () и calloc (), давайте сначала разберемся в значении динамического распределения памяти. Выделение памяти - это процедура выделения памяти компьютера для выполнения программ и процессов. Мы используем методы динамического выделения, когда ранее неизвестно, сколько места в памяти необходимо для программы и процесса.

Динамическое выделение памяти возникает из-за проблем, связанных со статическим выделением памяти, например, если меньше элементов хранится, то остальная часть памяти излишне расходуется впустую. Следовательно, он преодолевает проблемы статического выделения памяти, когда память выделяется только тогда, когда это требуется.

Сравнительная таблица

Основа сравнениятаНос ()calloc ()
Нет блоковНазначает один блок требуемой памяти.
Назначает несколько блоков запрошенной памяти.
Синтаксисvoid * malloc (size_t size);void * calloc (size_t num, size_t size);
инициализацияmalloc () не очищает и не инициализирует выделенную память.Выделенная память инициализируется в ноль с помощью calloc ().
Способ распределенияФункция malloc () выделяет память размера 'size' из кучи.Функция calloc () выделяет память, размер которой равен num * size.
скоростьБыстроСравнительно медленно.

Определение malloc ()

Функция malloc назначает блок памяти в байтах . Пользователь должен явно указать размер блока, который требуется для использования.

Через функцию malloc программа запрашивает ОЗУ системы для выделения памяти, если запрос принят (то есть, функция malloc сообщает об успешном выделении памяти), она возвращает указатель на первый блок памяти. Он возвращает недействительный тип указателя, это означает, что может быть назначен любой тип указателя.

Хотя он возвращает NULL, если функции malloc не могут выделить необходимый объем памяти. Функция malloc доступна в TURBO C, заголовочном файле alloc.h или stdlib.h, а в UNIX она будет доступна в заголовочном файле. ,

СИНТАКСИС

Синтаксис этой функции следующий:

malloc(number of elements * size of each element);

например,
int *ptr;
ptr=malloc(10*sizeof (int))

Где размер представляет размер памяти, требуемый в байтах (т. Е. Количество смежных областей памяти, которые должны быть выделены).

Но, как упоминалось ранее, функция malloc возвращает пустой указатель, следовательно, оператор приведения необходим для изменения возвращаемого типа указателя в зависимости от наших потребностей, приведенное выше объявление может быть представлено в следующей форме:

ptr_var=(type_cast* ) malloc (size)

Где ptr_var - это имя указателя, который сохраняет начальный адрес выделенного блока памяти, type_cast - это тип данных, в который должен быть преобразован возвращенный указатель (или тип void), а size описывает размер выделенного блока памяти в байтах.,

Например:
int *ptr;
ptr=(int*) malloc (10 * size of (int));

Память, выделенная функцией malloc, содержит значение мусора .

Обратите внимание, что для проверки этого, если malloc сгенерировал соответствующий запрос для выделения памяти, предоставленной системной оперативной памятью, или отклонен (в случае, если требуемое пространство недоступно). Мы можем использовать свойство, в котором необходимый объем памяти не назначен, функция malloc возвращает NULL.

Определение calloc ()

Функция calloc работает точно так же, как и функция malloc, за исключением того факта, что она требует двух аргументов, так как в случае malloc () нужен только один аргумент.

Например:
int*ptr;
ptr = (int*)calloc(10, 2);

Здесь 2 указывает размер типа данных в байте, для которого мы хотим, чтобы распределение было выполнено, то есть в этом случае 2 для целых чисел. И 10 обозначает количество элементов, для которых должно быть выполнено распределение.

Помните, что аргумент, переданный функции malloc, был (n * 10), это единственный аргумент, который не следует путать, так как несколько аргументов всегда разделяются запятыми. Аргумент (n * 10) не имеет запятых между ними. Следовательно, это единственный аргумент, хотя и не простой, а выражение.

Возвращаясь к вышеуказанному объявлению, после выполнения вышеприведенного оператора запрашивающей программе выделяется блок памяти из 20 байтов, а адрес первого блока назначается запрашивающей программе, а адрес первого блока назначается указателю. PTR.

Память, выделенная функцией calloc, содержит все нули. Функция calloc также доступна в заголовочном файле или же в ТУРБО С.

Ключевые различия между malloc и calloc

Основные различия между функциями malloc и calloc:

  1. Один блок требуемой памяти назначается в malloc, в то время как calloc выделяет несколько блоков запрашиваемой памяти.
  2. Функция malloc не очищает и инициализирует выделенную память. Он содержит значение мусора и элемент выделенной памяти не может быть изменен. В отличие от этого, calloc инициализирует выделенную память в ноль.
  3. malloc быстрее, чем calloc, из-за необходимости дополнительных шагов инициализации в calloc, но разница незначительна.
  4. Другое различие между этими двумя заключается в том, что calloc - это malloc + memset, memset выделяет физические страницы в памяти, тогда как malloc назначает память только из кучи в виртуальном адресе.

Заключение:

Функции malloc и calloc используются для выделения памяти и имеют определенное преимущество, а недостаток, такой как malloc, быстрее по сравнению с calloc. Более того, malloc проще в использовании, поскольку он принимает только один аргумент, поскольку calloc выделяет память и инициализирует область памяти с нулем. Но вы бы предпочли использовать calloc, когда для вас важнее инициализация переменной .

Top