Ключевая разница – calloc и malloc
В программировании необходимо хранить данные. Данные сохраняются в памяти. Эти ячейки памяти известны как переменные. Каждая переменная имеет определенный тип. Это могут быть целые числа, числа с плавающей запятой, двойные числа, символы и т. д. Существуют также структуры данных, которые могут хранить последовательный набор элементов одного типа фиксированного размера. Это массив. Программист должен объявить размер массива. Если программист объявляет массив целых чисел для пяти элементов, невозможно присвоить значение индексу выше объявленного размера. Выделение памяти фиксировано и не может быть изменено во время выполнения. Другой метод выделения памяти - динамическое выделение памяти. Динамическое выделение памяти помогает выделять больше памяти при необходимости и освобождать ее при необходимости. Заголовочный файл имеет четыре функции для динамического выделения памяти. calloc и malloc - две такие функции. Ключевое различие между calloc и malloc заключается в том, что calloc выделяет память, а также инициализирует выделенные блоки памяти нулем, тогда как malloc выделяет память, но не инициализирует эту выделенную память нулем. Доступ к содержимому в calloc даст нулевое значение, а malloc даст мусорное значение.
Что такое calloc?
Выделение памяти - это процесс выделения памяти для выполняемых программ. Иногда необходимо изменить размер памяти. Поэтому используется динамическое выделение памяти. Это делается с помощью указателей. Указатели - это ссылочные переменные, содержащие адрес другой переменной.
Рисунок 01: calloc и malloc
calloc означает «непрерывное выделение». Он выделяет несколько блоков памяти одинакового размера. Синтаксис calloc следующий. Он принимает два аргумента. Это количество блоков и размер каждого блока. Функция calloc возвращает пустой указатель, поэтому оператор приведения используется для возвращаемого типа указателя в соответствии с требуемым типом данных.
voidcalloc(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 теперь указывает на базовый адрес этого блока памяти. Все выделенные области инициализируются нулями. Будет напечатано сообщение Memory Allocated. Если выделение памяти не удалось, он вернет нулевой указатель. Поэтому он будет печатать сообщение «Память не выделена».
Что такое malloc?
Функция malloc используется для выделения необходимого количества байтов в памяти. Синтаксис malloc следующий. Размер представляет требуемую память в байтах.
void malloc(size_t_size);
Функция malloc возвращает пустой указатель, поэтому оператор приведения используется для возвращаемого типа указателя в соответствии с требуемым типом данных.
См. приведенную ниже простую программу на C с функцией malloc.
включить
включить
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf("Память не выделена");
}
иначе{
printf("Память выделена");
}
возврат 0;
}
В соответствии с приведенной выше программой будет выделен блок памяти. Указатель указывает на начальный адрес выделенной памяти. Возвращаемый указатель преобразуется в целочисленный тип. Если память выделена, будет напечатано сообщение «Память выделена». Если память не выделена, возвращается нулевой указатель. Следовательно, будет напечатано сообщение о том, что память не выделена.
Каковы сходства между calloc и malloc?
- Обе эти функции объявлены в заголовочном файле. Это стандартный заголовочный файл библиотеки.
- Обе функции используются для динамического выделения памяти.
- Указатель, возвращаемый calloc и malloc, должен быть приведен к определенному типу.
- При успешном выделении памяти обе функции вернут указатель с базовым адресом блока памяти.
- Если выделение памяти не удалось, будет возвращен нулевой указатель.
В чем разница между calloc и malloc?
calloc против malloc |
|
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. |
Резюме – calloc vs malloc
При статическом распределении памяти, таком как использование массивов, память фиксирована. Если сохраняется мало элементов, то остальная память тратится впустую. Это также может вызвать ошибки, если выделенная память меньше требуемой памяти. Поэтому используется динамическое выделение памяти. В языке C calloc и malloc обеспечивают динамическое выделение памяти. Разница между calloc и malloc заключается в том, что calloc выделяет память, а также инициализирует выделенные блоки памяти нулем, в то время как malloc выделяет память, но не инициализирует блоки памяти нулем. Malloc принимает два аргумента, в то время как calloc принимает два аргумента.
Загрузить PDF-файл calloc vs malloc
Вы можете загрузить PDF-версию этой статьи и использовать ее в автономном режиме в соответствии с примечанием к цитированию. Загрузите PDF-версию здесь: Разница между calloc и malloc