Преди да научим разликата между malloc и calloc, нека научим-
Какво е динамично разпределение на паметта?
Динамичното разпределение на паметта е процес на разпределяне на паметта по време на изпълнение. Има четири библиотечни подпрограми, calloc (), free (), realloc () и malloc (), които могат да се използват за разпределяне на паметта и освобождаване по време на изпълнението на програмата. Тези процедури са дефинирани в заглавния файл, наречен stdlib.h.
Какво е malloc ()?
Това е функция, която се използва за динамично разпределение на блок памет. Той запазва място в паметта с определен размер и връща нулевия указател, сочещ към мястото на паметта.
Върнатият указател обикновено е от тип void. Това означава, че можем да присвоим функция malloc на всеки указател. Пълната форма на malloc е разпределението на паметта.
В този урок ще научите:
- Какво е динамично разпределение на паметта?
- Какво е malloc ()?
- Какво е calloc ()?
- Защо да използвам malloc ()?
- Защо да използвам calloc ()?
- Синтаксис на malloc ()
- Синтаксис на calloc ()
- Пример за malloc () в C
- Пример за calloc () в C
- Разлика между calloc () и malloc ()
Какво е calloc ()?
Функцията Calloc () се използва за разпределяне на множество блокове памет. Това е функция за динамично разпределение на паметта, която се използва за разпределяне на паметта към сложни структури от данни като масиви и структури. Ако тази функция не успее да разпредели достатъчно място, както е посочено, тя връща ще бъде нулев указател. Пълната форма на функция calloc е непрекъснато разпределение.
Защо да използвам malloc ()?
Ето причините за използването на malloc ()
- Трябва да използвате malloc (), когато трябва да разпределите памет по време на изпълнение.
- Трябва да използвате malloc, когато трябва да разпределите обекти, които трябва да съществуват след изпълнението на текущия блок памет.
- Отидете на malloc (), ако трябва да разпределите памет, по-голяма от размера на този стек.
- Той връща показалеца към първия байт от разпределеното пространство.
- Той позволява на разработчиците да разпределят паметта, колкото е необходимо, в точното количество.
- Тази функция разпределя размера на блока памет от байта от купчината.
Защо да използвам calloc ()?
Ето причините за използването на calloc ()
- Когато трябва да настроите разпределената памет на нула.
- Можете да използвате calloc, който връща указател, за да получите достъп до купчината памет.
- Използва се, когато трябва да инициализирате елементите до нула, за да върне указател към паметта.
- За да се предотврати преливането, което е възможно с 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#include 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#include 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
Разлика между calloc () и malloc ()
Ето важната разлика между malloc () и calloc ():
malloc () | calloc () |
Функцията Malloc () ще създаде единичен блок памет с размер, посочен от потребителя. | Функцията Calloc () може да присвоява множество блокове памет за променлива. |
Функцията Malloc съдържа стойност за боклук. | Блокът памет, разпределен от функция calloc, винаги се инициализира до нула. |
Броят на аргументите е 2. | Броят на аргументите е 1. |
Calloc е по-бавен от malloc. | Malloc е по-бърз от calloc. |
Той не е сигурен в сравнение с calloc. | Той е сигурен за използване в сравнение с malloc. |
Ефективността във времето е по-висока от calloc (). | Ефективността във времето е по-ниска от malloc (). |
Функцията Malloc () връща само началния адрес и не го прави нула. | Преди да разпредели адреса, функцията Calloc () връща началния адрес и го прави нула. |
Той не извършва инициализиране на паметта. | Извършва инициализация на паметта. |
КЛЮЧОВИ РАЗЛИКИ:
- Функцията malloc () връща само началния адрес и не го прави нула, от друга страна, функцията calloc () връща началния адрес и го прави нула.
- При функцията malloc броят на аргументите е 2, докато при функцията calloc броят на аргументите е 1.
- ефективността на времето malloc () е по-висока от calloc (), докато malloc () не е сигурен в сравнение с calloc ()
- malloc не инициализира паметта, докато calloc извършва инициализация на паметта.