ডাইনামিক মেমরি বরাদ্দ
-
এক্সিকিউশনের সময় মেমরির বরাদ্দ (রান টাইম) ডায়নামিক মেমরি বরাদ্দ হিসাবে পরিচিত।
-
ফাংশন calloc() এবং malloc() গতিশীল মেমরি বরাদ্দ সমর্থন করে।
-
যখন ফাংশন দ্বারা মান ফেরত দেওয়া হয় এবং পয়েন্টার ভেরিয়েবলে বরাদ্দ করা হয় তখন এই ফাংশনগুলি ব্যবহার করে মেমরির স্থানের গতিশীল বরাদ্দ করা হয়৷
-
এই ক্ষেত্রে, ভেরিয়েবলগুলি বরাদ্দ করা হয় শুধুমাত্র যদি আপনার প্রোগ্রাম ইউনিট সক্রিয় হয়।
-
এটি গতিশীল বরাদ্দ বাস্তবায়নের জন্য হিপ নামক ডেটা কাঠামো ব্যবহার করে।
-
মেমরির পুনঃব্যবহারযোগ্যতা রয়েছে এবং প্রয়োজন না হলে মেমরি মুক্ত করা যেতে পারে।
-
এটি আরও কার্যকর।
-
এই মেমরি বরাদ্দকরণ স্কিমে, স্থির মেমরি বরাদ্দের চেয়ে নির্বাহ করা ধীর।
-
এখানে প্রোগ্রাম চলাকালীন যেকোন সময় মেমরি প্রকাশ করা যেতে পারে।
উদাহরণ
নিম্নলিখিত প্রোগ্রামটি ডায়নামিক মেমরি বরাদ্দকরণ ফাংশন ব্যবহার করে উপাদানগুলির একটি সেটে জোড় সংখ্যা এবং বিজোড় সংখ্যার যোগফল গণনা করে -
#include<stdio.h>
#include<stdlib.h>
void main(){
//Declaring variables, pointers//
int i,n;
int *p;
int even=0,odd=0;
//Declaring base address p using malloc//
p=(int *)malloc(n*sizeof(int));
//Reading number of elements//
printf("Enter the number of elements : ");
scanf("%d",&n);
/*Printing O/p -
We have to use if statement because we have to check if memory
has been successfully allocated/reserved or not*/
if (p==NULL){
printf("Memory not available");
exit(0);
}
//Storing elements into location using for loop//
printf("The elements are : \n");
for(i=0;i<n;i++){
scanf("%d",p+i);
}
for(i=0;i<n;i++){
if(*(p+i)%2==0){
even=even+*(p+i);
}
else{
odd=odd+*(p+i);
}
}
printf("The sum of even numbers is : %d\n",even);
printf("The sum of odd numbers is : %d\n",odd);
} আউটপুট
Enter the number of elements : 4 The elements are : 35 24 46 12 The sum of even numbers is : 82 The sum of odd numbers is : 35