C Програмування

ЯК ВИКОРИСТОВУВАТИ ФУНКЦІЮ MALLOC В C

ЯК ВИКОРИСТОВУВАТИ ФУНКЦІЮ MALLOC В C
Malloc - це вбудована функція, оголошена у файлі заголовка . Malloc - це коротка назва "виділення пам'яті", яка використовується для динамічного розподілу одного великого блоку суміжної пам'яті відповідно до вказаного розміру. Існує два типи розподілу пам'яті - статичний та динамічний. Розподіл статичної пам'яті здійснюється під час компіляції, і він не змінюється під час виконання. Динамічне виділення пам’яті - це виділення пам’яті під час виконання для цього; ми використовуємо malloc. Зараз справа в тому, звідки надходить ця пам’ять, тому всі динамічні вимоги в C виконуються з купи пам’яті. В основному, наша програма / програма буде мати 3 види пам'яті

  • Пам'ять стека є локальною для кожного методу, і коли метод повертається, стек автоматично очищає його.
  • Область глобальної пам'яті виділяє пам’ять для всіх глобальних змінних. Ця область пам'яті створюється на початку програми, і врешті-решт вона автоматично очищає область пам'яті.
  • Куча пам’яті - це завжди ворог, який відповідає всім динамічним вимогам програми / програми. Кожного разу, коли ми збираємося використовувати функцію malloc, вона збирає в купі трохи пам'яті і передає нам вказівник на неї.

Синтаксис:

Синтаксис malloc - це (void *) malloc (size_t size). Отже, синтаксис говорить, що malloc вимагає розміру, він поверне вказівник, в основному порожній вказівник, і розмір t визначений у як ціле число без знака. Функція Malloc просто виділяє блок пам'яті відповідно до розміру, вказаного в купі, як ви можете бачити в синтаксисі, що розмір потрібно вказати, і після успіху вона повертає покажчик, що вказує на перший байт виділеної пам'яті, інакше повертає NULL. Отже, завдання malloc - розподілити пам’ять під час роботи.

Чому анулювати покажчик:

Малок не має уявлення про те, на що він вказує; це просто означає, що він не знає, які дані будуть зберігатися в цьому місці пам'яті. Він просто розподіляє пам’ять, запитувану користувачем, не знаючи типу даних, що зберігаються в пам’яті. Ось чому він повертає порожній покажчик.

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

Тут ми просимо malloc виділити 6 байт пам'яті зараз, якщо успішно malloc поверне порожній покажчик. У цьому випадку ми повинні ввести його в тип цілочисельного покажчика, оскільки ми хочемо зберегти ціле число в цій пам’яті. Тут malloc виділяє 6 байт пам'яті в купі, а адреса першого байта зберігається в покажчику ptr.

Приклад програми:

Ось простий приклад програми для того, щоб правильно зрозуміти поняття malloc.

Тут ви можете побачити за допомогою функції printf, я прошу користувача ввести кількість цілих чисел. Ми оголосили дві змінні вище i та n. Змінна n - це місце, де ми будемо зберігати число, введене користувачем. Після цього ми маємо функцію malloc; ми хочемо, щоб malloc виділив розмір, еквівалентний розміру n цілих чисел. Ми множимо розмір, якщо int з n; це дасть нам розмір n цілих чисел. Після цього malloc поверне покажчик void, і ми вводимо його в цілочисельний покажчик, і ми зберігаємо адресу в покажчику ptr. Набір тексту важливий, оскільки це хороша практика.

Тепер, якщо покажчик містить NULL, це означає, що пам’ять недоступна. Тож ми просто вийдемо з програми зі статусом помилки виходу. Якщо це не так, ми можемо легко запустити цикл for.

Цикл буде працювати від 0 до n-1, і ми будемо просити користувача щоразу вводити ціле число. У функції scanf є одна річ, написана ptr + i, оскільки ми знаємо, що ptr містить адресу першого байта пам'яті. Скажімо, адреса тут 1000, спочатку i дорівнює нулю, тому 1000 + 0 дорівнює 1000, тому в цій адресі буде зберігатися наше перше ціле число, а потім після цього, коли i стане 1, так 1000 + 1, що внутрішньо інтерпретується як (1000) +1 * 4, якщо я припускаю, що розмір цілого числа дорівнює 4 байтам, і це буде дорівнює 1004, тому наступне ціле число буде зберігатися в межах розташування 1004. І це буде продовжуватися таким чином, адреси на зразок 1000, 1004, 1008 тощо. Ми не використовуємо амперсанд перед ptr + i, оскільки ptr вже дає нам адресу, коли ми пишемо ptr, який є просто покажчиком, і він містить адресу, а не значення, тому немає вимоги ставити амперсанд перед ним, і ця концепція повинна бути чіткою.

Тут, у цьому циклі, ми просто робимо одне: друкуємо всі цілі числа на екрані; очевидно, ми використовуємо ptr + i, але тут, у цьому випадку, ми розмежовуємо його, оскільки ptr + i представляє адресу, тому нам потрібно його розмежувати. Якщо i дорівнює 0, це буде 1000, тому що ми припускаємо, що перша адреса буде 1000, тому ми розмежовуємо її; ми отримаємо перше ціле число, тоді i дорівнює 1, і воно стане 1001, але інтерпретується як 1004, якщо розмір цілого числа 4. Знову ж таки. Ми розблоковуємо його, тому він дасть нам 2й ціле число. Таким чином, все працює.

Отже, це в основному проста програма, яка просить користувачів ввести n цілих чисел, а потім ми просто відображаємо ці цілі числа на екрані. Після запуску програми це відобразиться.

Спочатку ми просимо користувача ввести кількість цілих чисел, а потім користувач вводить цілі числа, і ми просто відображаємо їх на екрані.

Висновок:

У вищезазначеній програмі немає нічого поганого, поки ми продовжуємо її дуже довго, тут ми позичаємо пам’ять із купи, але ми ніколи не повертаємо пам’ять назад до купи, це відбувається лише в тому випадку, коли програма / додаток має бігати тривалий час, наприклад, 24 години. Вони знову викличуть функцію malloc, і це знову означає, що кожного разу, коли вони запозичують пам'ять з купи і ніколи не повертаються, це погане програмування, тому нам слід написати безкоштовно (адресу пам'яті, яку слід звільнити) перед поверненням. Отже, коли важливо використовувати malloc free. Отже, використовуючи malloc, ми зберегли пам’ять, і malloc виділяє пам’ять настільки велику, наскільки ви про це просите.

Щасливий динамічний розподіл пам’яті!

Best Linux Distros for Gaming in 2021
The Linux operating system has come a long way from its original, simple, server-based look. This OS has immensely improved in recent years and has no...
Як зафіксувати та транслювати ігровий сеанс на Linux
Раніше грати в ігри вважалося лише хобі, але з часом ігрова індустрія спостерігала величезний ріст з точки зору технологій та кількості гравців. Аудит...
Найкращі ігри для гри з відстеженням рук
Нещодавно Oculus Quest представив чудову ідею відстеження рук без контролерів. Завдяки постійно зростаючій кількості ігор та заходів, які виконують пі...