Разлика между malloc() и calloc()
Ключови разлики между malloc() срещу calloc()
- Функцията malloc() връща само началния адрес и не го прави нула, от друга страна, функцията calloc() връща началния адрес и го прави нула.
- Във функцията malloc броят на аргументите е 1, докато във функцията calloc броят на аргументите е 2.
- времевата ефективност на malloc() е по-висока от calloc(), докато malloc() не е защитен в сравнение с calloc()
- malloc не инициализира паметта, докато calloc извършва инициализация на паметта.

Какво е динамично разпределение на паметта?
Динамично разпределение на паметта е процес на разпределяне на памет по време на изпълнение. Има четири библиотечни процедури, calloc(), free(), realloc()и malloc(), които могат да се използват за разпределяне на памет и освобождаването й по време на изпълнение на програмата. Тези процедури са дефинирани в заглавния файл, наречен stdlib.h.
Какво е malloc()?
Това е функция, която се използва за динамично разпределяне на блок памет. Той запазва място в паметта с определен размер и връща нулевия указател, сочещ към мястото в паметта.
Върнатият указател обикновено е от тип void. Това означава, че можем да присвоим функция malloc на всеки указател. Пълната форма на malloc е разпределение на паметта.
Какво е calloc()?
Функция Calloc(). се използва за разпределяне на множество блокове памет. Това е функция за динамично разпределение на паметта, която се използва за разпределяне на паметта към сложни структури от данни като масиви и структури. Ако тази функция не успее да задели достатъчно място, както е посочено, тя връща нулев указател. Пълната форма на функцията calloc е непрекъснато разпределение.
Разлика между malloc() и calloc()
Ето важната разлика между malloc() срещу calloc():
malloc () | calloc() |
---|---|
Функцията Malloc() ще създаде единичен блок памет с размер, зададен от потребителя. | Функцията Calloc() може да присвоява множество блокове памет за една променлива. |
Функцията Malloc съдържа стойност за боклук. | Блокът памет, разпределен от функция calloc, винаги се инициализира на нула. |
Броят на аргументите е 1. | Броят на аргументите е 2. |
Calloc е по-бавен от malloc. | Malloc е по-бърз от calloc. |
Не е сигурно в сравнение с calloc. | Той е безопасен за използване в сравнение с malloc. |
Времевата ефективност е по-висока от calloc(). | Времевата ефективност е по-ниска от malloc(). |
Функцията Malloc() връща само начален адрес и не го прави нула. | Преди да разпредели адреса, функцията Calloc() връща началния адрес и го прави нула. |
Не извършва инициализация на паметта. | Той извършва инициализация на паметта. |
Синтаксис на malloc()
Ето синтаксис на malloc()
ptr = (cast_type *) malloc (byte_size);
В горния синтаксис ptr е указател на cast_type. Функцията malloc връща указател към разпределената памет на byte_size.
Example: ptr = (int *) malloc (50)
Когато този оператор се изпълни успешно, се запазва място в паметта от 50 байта. Адресът на първия байт от запазеното пространство се присвоява на указателя "ptr" от тип int.
Синтаксис на calloc()
Ето синтаксис на malloc()
ptr = (cast_type *) calloc (n, size);
Горният синтаксис се използва за разпределяне на n блока памет с еднакъв размер. След като пространството в паметта е разпределено, всички байтове се инициализират до нула. Връща се указателят, който в момента е на първия байт от разпределеното пространство в паметта.
Пример за malloc() в C
В кода по-долу sizeof(*ptr) се използва за разпределяне на блок памет от 15 цели числа. В оператора printf намираме стойността на 6-то цяло число.
#include<stdlib.h> #include<stdio.h> int main(){ int *ptr; ptr = malloc(15 * sizeof(*ptr)); if (ptr != NULL) { *(ptr + 5) = 480; printf("Value of the 6th integer is %d",*(ptr + 5)); } }
Изход:
Стойността на 6-то цяло число е 480
Пример за calloc() в C
Програмата на езика C по-долу изчислява сумата от първите десет члена. Ако стойността на указателя е нула, тогава пространството в паметта няма да бъде разпределено.
Цикълът for се използва за повторение на стойността на променлива „i“ и отпечатване на сумата. И накрая, функцията free се използва за освобождаване на показалеца.
#include <stdio.h> #include <stdlib.h> int main() { int i, * ptr, sum = 0; ptr = calloc(10, sizeof(int)); if (ptr == NULL) { printf("Error! memory not allocated."); exit(0); } printf("Building and calculating the sequence sum of the first 10 terms \n"); for (i = 0; i < 10; ++i) { * (ptr + i) = i; sum += * (ptr + i); } printf("Sum = %d", sum); free(ptr); return 0; }
Изход:
Изграждане и изчисляване на сумата на последователността на първите 10 члена n Сума = 45
Защо да използвате malloc()?
Ето причините да използвате malloc()
- Трябва да използвате malloc(), когато трябва да разпределите памет по време на изпълнение.
- Трябва да използвате malloc, когато трябва да разпределите обекти, които трябва да съществуват извън изпълнението на текущия блок памет.
- Изберете malloc(), ако трябва да разпределите памет, по-голяма от размера на този стек.
- Връща указателя към първия байт от разпределеното пространство.
- Позволява на разработчиците да разпределят памет според нуждите в точния размер.
- Тази функция разпределя размер на блок памет от байтове от купчината.
Защо да използвате calloc()?
Ето причините да използвате calloc()
- Когато трябва да зададете разпределената памет на нула.
- Можете да използвате calloc, който връща указател, за да получите достъп до паметта.
- Използва се, когато трябва да инициализирате елементите до нула, за да върнете указател към паметта.
- За да предотвратите препълване, което е възможно с malloc()
- Използвайте calloc(), за да поискате страница, за която е известно, че вече е нулирана.