Препоръчано, 2024

Избор На Редактора

Разлика между malloc и calloc

Основната разлика между функцията malloc и calloc е, че calloc () се нуждае от два аргумента вместо един аргумент, който се изисква от malloc () . Както malloc (), така и calloc () са функциите, които програмният език C осигурява за динамично разпределение на паметта и де-разпределение по време на изпълнение.

Преди да разберем функциите на malloc () и calloc () първо да разберем смисъла на разпределението на динамичната памет. Разпределението на паметта е процедурата за възлагане на компютърната памет за изпълнение на програми и процеси. Ние използваме динамични техники за разпределение, когато не е известно преди колко място в паметта е необходимо за програмата и процеса.

Динамичното разпределение на паметта възниква поради проблемите, свързани с разпределянето на статична памет, като например, ако се съхраняват по-малко елементи, тогава останалата част от паметта се губи ненужно. Следователно, той преодолява проблемите на разпределението на статичната памет, където паметта се разпределя само когато е необходима.

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

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

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

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

Чрез функцията malloc програма изисква RAM на системата за разпределение на паметта, ако искането е прието (т.е. функцията malloc е успешна при разпределянето на паметта), тя връща указател към първия блок на паметта. Тя връща void тип указател, което означава, че всеки тип указател може да бъде присвоен.

Въпреки, че връща 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 връща void указател, следователно е необходим cast оператор за промяна на върнатия тип указател въз основа на нашата нужда, горната декларация може да бъде представена в следната форма:

ptr_var=(type_cast* ) malloc (size)

Където ptr_var е името на показалеца, който запазва началния адрес на разпределения блок памет, type_cast е типът данни, в който трябва да се преобразува върнатият указател (или тип void) и размерът описва размера на разпределения блок памет в байтове,

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

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

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

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

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

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

Тук 2 указва размера на типа данни в байт, за който искаме да бъде направено разпределението, което в този случай е 2 за цели числа. 10 обозначават броя на елементите, за които трябва да се разпредели.

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

Връщайки се към горната декларация, след изпълнението на по-горното изявление, на заявяващата програма се разпределя блок от памет от 20 байта и адресът на първия блок се присвоява на заявяващата програма и адресът на първия блок се присвоява на показалеца КОП.

Паметта, отделена от функцията calloc, задържа всички нули. Функцията calloc също може да се получи в заглавния файл или в TURBO C.

Ключови разлики между 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 разпределя паметта и инициализира областта на паметта с ZERO. Но предпочитате да използвате calloc, когато инициализацията на променливата е по-важна за вас.

Top