Ключова разлика – 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 сега сочи към основния адрес на този блок памет. Всички разпределени региони се инициализират на нули. Той ще отпечата съобщението Разпределена памет. Ако разпределението на паметта е неуспешно, то ще върне нулевия указател. Следователно ще отпечата съобщението, че паметта не е разпределена.
Какво е 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 срещу malloc
При статичното разпределение на паметта, като използваме масиви, паметта е фиксирана. Ако се съхраняват малко елементи, тогава останалата част от паметта се губи. Може също да причини грешки, когато разпределената памет е малка от необходимата. Следователно се използва динамично разпределение на паметта. В езика C calloc и malloc осигуряват динамично разпределение на паметта. Разликата между calloc и malloc е, че calloc разпределя памет и също така инициализира разпределените блокове памет до нула, докато malloc разпределя паметта, но не инициализира блоковете памет до нула. Malloc приема два аргумента, докато calloc приема два аргумента.
Изтеглете PDF файла на calloc срещу malloc
Можете да изтеглите PDF версията на тази статия и да я използвате за офлайн цели според бележката за цитиране. Моля, изтеглете PDF версията тук: Разлика между calloc и malloc