Динамічний розподіл пам'яті в C
Поняття про динамічний розподіл пам'яті мовою c дозволяє програмісту C виділяти пам'ять під час виконання . Динамічний розподіл пам'яті на мові c можливий за допомогою 4 функцій файлу заголовка stdlib.h.
- malloc()
- calloc()
- realloc()
- безкоштовно()
Перш ніж вивчати вищенаведені функції, давайте зрозуміємо різницю між статичним розподілом пам’яті та динамічним розподілом пам’яті.
| розподіл статичної пам'яті | динамічний розподіл пам'яті |
|---|---|
| пам'ять виділяється під час компіляції. | пам'ять виділяється під час виконання. |
| пам'ять не можна збільшити під час виконання програми. | пам'ять можна збільшити під час виконання програми. |
| використовується в масиві. | використовується у зв’язаному списку. |
Тепер давайте швидко розглянемо методи, які використовуються для динамічного розподілу пам'яті.
| malloc() | виділяє один блок запитаної пам'яті. |
| calloc() | виділяє кілька блоків запитаної пам'яті. |
| realloc() | перерозподіляє пам'ять, зайняту функціями malloc() або calloc(). |
| безкоштовно() | звільняє динамічно виділену пам'ять. |
функція malloc() у C
Функція malloc() виділяє один блок необхідної пам’яті.
Він не ініціалізує пам’ять під час виконання, тому спочатку має сміттєве значення.
Він повертає NULL, якщо пам’яті недостатньо.
Синтаксис функції malloc() наведено нижче:
ptr=(cast-type*)malloc(byte-size)
Давайте розглянемо приклад функції malloc().
#include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)malloc(n*sizeof(int)); //memory allocated using malloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d',sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>calloc() function in C</h2> <p>The calloc() function allocates multiple block of requested memory.</p> <p>It initially initialize all bytes to zero.</p> <p>It returns NULL if memory is not sufficient.</p> <p>The syntax of calloc() function is given below:</p> <pre> ptr=(cast-type*)calloc(number, byte-size) </pre> <p>Let's see the example of calloc() function.</p> <pre> #include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf('%d',ptr+i); sum+="*(ptr+i);" } printf('sum="%d',sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let's see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let's see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)></pre></n;++i)> функція calloc() у C
Функція calloc() виділяє декілька блоків запитаної пам’яті.
Він спочатку ініціалізує всі байти до нуля.
Він повертає NULL, якщо пам’яті недостатньо.
Синтаксис функції calloc() наведено нижче:
ptr=(cast-type*)calloc(number, byte-size)
Давайте розглянемо приклад функції calloc().
#include #include int main(){ int n,i,*ptr,sum=0; printf('Enter number of elements: '); scanf('%d',&n); ptr=(int*)calloc(n,sizeof(int)); //memory allocated using calloc if(ptr==NULL) { printf('Sorry! unable to allocate memory'); exit(0); } printf('Enter elements of array: '); for(i=0;i<n;++i) { scanf(\'%d\',ptr+i); sum+="*(ptr+i);" } printf(\'sum="%d',sum);" free(ptr); return 0; < pre> <p> <strong>Output</strong> </p> <pre> Enter elements of array: 3 Enter elements of array: 10 10 10 Sum=30 </pre> <h2>realloc() function in C</h2> <p>If memory is not sufficient for malloc() or calloc(), you can reallocate the memory by realloc() function. In short, it changes the memory size.</p> <p>Let's see the syntax of realloc() function.</p> <pre> ptr=realloc(ptr, new-size) </pre> <h2>free() function in C</h2> <p>The memory occupied by malloc() or calloc() functions must be released by calling free() function. Otherwise, it will consume memory until program exit.</p> <p>Let's see the syntax of free() function.</p> <pre> free(ptr) </pre> <hr></n;++i)> функція realloc() у C
Якщо пам’яті недостатньо для malloc() або calloc(), ви можете перерозподілити пам’ять за допомогою функції realloc(). Коротше кажучи, він змінює розмір пам'яті.
Давайте розглянемо синтаксис функції realloc().
ptr=realloc(ptr, new-size)
функція free() у C
Пам’ять, зайняту функціями malloc() або calloc(), має бути звільнена шляхом виклику функції free(). Інакше він споживатиме пам’ять до виходу з програми.
Давайте розглянемо синтаксис функції free().
free(ptr)