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