কম্পিউটার

সি-তে ডায়নামিক মেমরি অ্যালোকেশন কী?


এখানে আমরা সি-তে ডায়নামিক মেমরি অ্যালোকেশন কী তা দেখব। সি প্রোগ্রামিং ল্যাঙ্গুয়েজ মেমরি বরাদ্দকরণ এবং পরিচালনার জন্য বিভিন্ন ফাংশন প্রদান করে। এই ফাংশনগুলি হেডার ফাইলে পাওয়া যাবে। মেমরি বরাদ্দের জন্য নিম্নলিখিত ফাংশন।

ফাংশন বিবরণ
অকার্যকর *calloc(int num, int size); এই ফাংশনটি num এর একটি অ্যারে বরাদ্দ করে উপাদান যার প্রতিটি আকার বাইটে আকার হবে।
অকার্যকর বিনামূল্যে(অকার্যকর *ঠিকানা); এই ফাংশন ঠিকানা দ্বারা নির্দিষ্ট মেমরি ব্লকের একটি ব্লক প্রকাশ করে।
void *malloc(int num); এই ফাংশনটি num এর একটি অ্যারে বরাদ্দ করে বাইট এবং সেগুলোকে শুরু না করে ছেড়ে দিন।
void *realloc(void *address, int newsize); এই ফাংশনটি নিউজাইজ পর্যন্ত প্রসারিত করে মেমরি পুনরায় বরাদ্দ করে .

গতিশীলভাবে মেমরি বরাদ্দ করা হচ্ছে

প্রোগ্রামিং করার সময়, আপনি যদি অ্যারের আকার সম্পর্কে সচেতন হন তবে এটি সহজ এবং আপনি এটিকে অ্যারে হিসাবে সংজ্ঞায়িত করতে পারেন। উদাহরণস্বরূপ, যেকোনো ব্যক্তির নাম সংরক্ষণ করতে, এটি সর্বাধিক 100টি অক্ষর পর্যন্ত যেতে পারে, তাই আপনি নিম্নরূপ কিছু সংজ্ঞায়িত করতে পারেন -

char name[100];

কিন্তু এখন আসুন আমরা এমন একটি পরিস্থিতি বিবেচনা করি যেখানে আপনার সংরক্ষণ করার জন্য প্রয়োজনীয় পাঠ্যের দৈর্ঘ্য সম্পর্কে আপনার কোন ধারণা নেই, উদাহরণস্বরূপ, আপনি একটি বিষয় সম্পর্কে একটি বিশদ বিবরণ সংরক্ষণ করতে চান। এখানে আমাদের কতটা মেমরির প্রয়োজন তা নির্ধারণ না করে অক্ষরের জন্য একটি পয়েন্টার নির্ধারণ করতে হবে এবং পরে, প্রয়োজনীয়তার ভিত্তিতে, আমরা নীচের উদাহরণে দেখানো মেমরি বরাদ্দ করতে পারি -

উদাহরণ কোড

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 200 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcpy( description, "Adam a DPS student in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
}

আউটপুট

Name = Zara Ali
Description: Zara ali a DPS student in class 10th

কলক() ব্যবহার করে একই প্রোগ্রাম লেখা যেতে পারে; একমাত্র জিনিস হল আপনাকে নিচের মত করে calloc দিয়ে malloc প্রতিস্থাপন করতে হবে -

calloc(200, sizeof(char));

তাই আপনার সম্পূর্ণ নিয়ন্ত্রণ আছে এবং আপনি মেমরি বরাদ্দ করার সময় যেকোনো আকারের মান পাস করতে পারেন, অ্যারেগুলির বিপরীতে যেখানে একবার আকার নির্ধারণ করা হলে, আপনি এটি পরিবর্তন করতে পারবেন না।

মেমরি অবস্থানের আকার পরিবর্তন করা

যখন আপনার প্রোগ্রামটি বেরিয়ে আসে, অপারেটিং সিস্টেম স্বয়ংক্রিয়ভাবে আপনার প্রোগ্রাম দ্বারা বরাদ্দ করা সমস্ত মেমরি রিলিজ করে তবে একটি ভাল অনুশীলন হিসাবে যখন আপনার আর মেমরির প্রয়োজন হয় না তখন আপনার ফাংশনটি ফ্রি() কল করে সেই মেমরিটি ছেড়ে দেওয়া উচিত।

বিকল্পভাবে, আপনি realloc() ফাংশন কল করে একটি বরাদ্দকৃত মেমরি ব্লকের আকার বাড়াতে বা কমাতে পারেন। আসুন আমরা উপরের প্রোগ্রামটি আবার পরীক্ষা করি এবং realloc() এবং free() ফাংশনগুলি ব্যবহার করি -

উদাহরণ কোড

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char name[100];
   char *description;
   strcpy(name, "Adam");
   /* allocate memory dynamically */
   description = malloc( 30 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcpy( description, "Adam a DPS student.");
   }
   /* suppose you want to store bigger description */
   description = realloc( description, 100 * sizeof(char) );
   if( description == NULL ) {
      fprintf(stderr, "Error - unable to allocate required memory\n");
   } else {
      strcat( description, "He is in class 10th");
   }
   printf("Name = %s\n", name );
   printf("Description: %s\n", description );
   /* release memory using free() function */
   free(description);
}
ব্যবহার করে মেমরি রিলিজ করুন

আউটপুট

Name = Adam
Description: Adam a DPS student.He is in class 10th

আপনি অতিরিক্ত মেমরি পুনরায় বরাদ্দ না করে উপরের উদাহরণটি চেষ্টা করতে পারেন, এবং strcat() ফাংশন বর্ণনায় উপলব্ধ মেমরির অভাবের কারণে একটি ত্রুটি দেবে৷


  1. RAM (র্যান্ডম অ্যাক্সেস মেমরি) কি?

  2. ডাইনামিক আইপি অ্যাড্রেস কী?

  3. সি ভাষায় মেমরি অপারেশন কি?

  4. সি প্রোগ্রামিং-এ স্ট্যাটিক মেমরি বরাদ্দ বলতে কী বোঝ?