Перш ніж вивчити різницю між malloc та calloc, давайте дізнаємось -
Що таке динамічне розподіл пам'яті?
Динамічне розподіл пам'яті - це процес розподілу пам'яті під час виконання. Існує чотири підпрограми бібліотеки, calloc (), free (), realloc () та malloc (), які можна використовувати для розподілу пам'яті та її звільнення під час виконання програми. Ці процедури визначені у файлі заголовка, який називається stdlib.h.
Що таке malloc ()?
Це функція, яка використовується для динамічного розподілу блоку пам'яті. Він зберігає простір у пам'яті заданого розміру і повертає нульовий покажчик, що вказує на місце в пам'яті.
Показник, що повертається, зазвичай має тип void. Це означає, що ми можемо призначити функцію malloc будь-якому покажчику. Повною формою malloc є виділення пам'яті.
У цьому підручнику ви дізнаєтесь:
- Що таке динамічне розподіл пам'яті?
- Що таке malloc ()?
- Що таке мозоль ()?
- Навіщо використовувати malloc ()?
- Навіщо використовувати calloc ()?
- Синтаксис malloc ()
- Синтаксис calloc ()
- Приклад malloc () у C
- Приклад calloc () у C
- Різниця між мозолем () та мальлоком ()
Що таке мозоль ()?
Функція 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 розраховує суму перших десяти термінів. Якщо значення вказівника має значення null, то простір у пам'яті не буде виділено.
Цикл 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
Різниця між мозолем () та мальлоком ()
Ось важлива відмінність між malloc () та calloc ():
malloc () | мозоль () |
Функція Malloc () створить єдиний блок пам’яті розміром, вказаним користувачем. | Функція Calloc () може призначити кілька блоків пам'яті для змінної. |
Функція Malloc містить значення сміття. | Блок пам'яті, виділений функцією calloc, завжди ініціалізується до нуля. |
Кількість аргументів - 2. | Кількість аргументів - 1. |
Калок повільніший за мальлок. | Малок швидший за мозоль. |
Це не безпечно, як у порівнянні з мозолем. | Це безпечно використовувати у порівнянні з malloc. |
Ефективність у часі вища, ніж калонка (). | Часова ефективність нижча, ніж malloc (). |
Функція Malloc () повертає лише початкову адресу і не робить її нульовою. | Перш ніж розподіляти адресу, функція Calloc () повертає початкову адресу і робить її нульовою. |
Він не виконує ініціалізацію пам'яті. | Він виконує ініціалізацію пам'яті. |
ОСНОВНІ ВІДМІННОСТІ:
- Функція malloc () повертає лише початкову адресу і не робить її нульовою, з іншого боку, функція calloc () повертає початкову адресу і робить її нульовою.
- У функції malloc кількість аргументів дорівнює 2, тоді як у функції calloc кількість аргументів - 1.
- malloc () ефективність часу вища, ніж calloc (), тоді як malloc () не є безпечним порівняно з calloc ()
- malloc не ініціалізує пам'ять, тоді як calloc виконує ініціалізацію пам'яті.