malloc в C: Пояснено динамічне розподіл пам'яті в C

Що таке malloc () у C?

malloc () - це бібліотечна функція, яка дозволяє C динамічно розподіляти пам'ять із купи. Купи - це область пам’яті, де щось зберігається.

malloc () є частиною stdlib.h, і щоб мати змогу ним користуватися, вам потрібно використовувати #include .

Як використовувати Malloc

malloc () виділяє пам'ять запитуваного розміру і повертає покажчик на початок виділеного блоку. Щоб утримувати цей повернутий покажчик, ми повинні створити змінну. Покажчик повинен мати той самий тип, що використовується в операторі malloc.

Тут ми зробимо вказівник на найближчий масив ints

int* arrayPtr;

На відміну від інших мов, С не знає типу даних, для якого виділяє пам’ять; про це потрібно сказати. На щастя, C має функцію, sizeof()яку ми можемо використовувати.

arrayPtr = (int *)malloc(10 * sizeof(int));

Це твердження використовувало malloc для виділення пам'яті для масиву з 10 цілих чисел. Оскільки розміри можуть змінюватися між комп’ютерами, важливо використовувати функцію sizeof () для обчислення розміру на поточному комп’ютері.

Будь-яку пам’ять, виділену під час виконання програми, потрібно буде звільнити до закриття програми. Для freeпам'яті ми можемо використовувати функцію free ()

free( arrayPtr );

Це твердження звільнить пам'ять, раніше виділену. C не поставляється з garbage collectorподібними до деяких інших мов, таких як Java. Як результат, пам’ять, що не звільняється належним чином, буде продовжувати виділятися після закриття програми.

Перш ніж продовжувати ...

Огляд

  • Malloc використовується для динамічного розподілу пам'яті і корисний, коли ви не знаєте обсяг пам'яті, необхідний під час компіляції.
  • Виділення пам'яті дозволяє об'єктам існувати поза межами поточного блоку.
  • C передається за значенням замість посилання. Використання malloc для призначення пам’яті, а потім передачі вказівника іншій функції є більш ефективним, ніж функція відтворення структури.

Більше інформації про програмування на C:

  • Посібник для початківців з програмування на С
  • Якщо ... ще пояснено твердження на С
  • Пояснено тернарний оператор на мові C.