কম্পিউটার টিউটোরিয়াল

সি ভাষায় ডাইনামিক মেমোরি অ্যালোকেশন (Dynamic Memory Allocation)

সি প্রোগ্রামিং ল্যাঙ্গুয়েজ মেমোরি অ্যালোকেশন ও ম্যানেজমেন্টের জন্য অনেক ফাংশন দিয়েছে। এই ফাংশনগুলো হেডার ফাইলে থাকে। মেমোরি অ্যালোকেশনের ফাংশনগুলো:

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

ডাইনামিক্যালি মেমোরি অ্যালোকেট করা

প্রোগ্রামিং সময় যদি অ্যারে সাইজ জানা থাকে, তবে সহজে অ্যারে ডিক্লেয়ার করা যায়। যেমন, একজন ব্যক্তির নাম স্টোর করতে হলে максимум ১০০ ক্যারেক্টার হতে পারে, তাই ডিক্লেয়ার করতে পারি:

char name[100];

алеकिन যদি টেক্সটের লেঙ্গ্থ অজানা থাকে (যেমন: একটি টপিকের বিস্তারিত বর্ণনা), তবে ক্যারেক্টার পয়েন্টার ডিক্লেয়ার করি সাইজ ছাড়া, এবং পরে প্রয়োজন অনুযায়ী মেমোরি অ্যালোকেট করি।

উদাহরণ কোড (malloc)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char name[100];
    char *description;
    strcpy(name, "Adam");
    /* ডাইনামিক্যালি মেমোরি অ্যালোকেট */
    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);
    return 0;
}

আউটপুট

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

এই প্রোগ্রাম calloc()-ও দিয়ে লেখা যায়, শুধু malloc কে calloc দিয়ে রিপ্লেস করুন:

calloc(200, sizeof(char));

এভাবে আপনার পূর্ণ নিযন্ত্রণ থাকে এবং যেকোনো সাইজ পাস করতে পারেন, অ্যারের মত একবার সাইজ ফিক্স করলে পরিবর্তন করা যায় না।

মেমোরি লোকেশন রিসাইজ করা (realloc)

প্রোগ্রাম শেষ হলে OS অটোমেটিক্যালি সব মেমোরি রিলিজ করে, কিন্তু ভালো অভ্যাস হিসেবে মেমোরি প্রয়োজন না থাকলে free() কল করে রিলিজ করা উচিত। অথবা realloc() কল করে অ্যালোকেটেড মেমোরি বড় বা ছোট করা যায়।

উদাহরণ কোড (realloc ও free)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char name[100];
    char *description;
    strcpy(name, "Adam");
    description = malloc(30 * sizeof(char));
    if (description == NULL) {
        fprintf(stderr, "Error - unable to allocate required memory\n");
    } else {
        strcpy(description, "Adam a DPS student.");
    }
    /* বড় ডেসক্রিপশন স্টোর করতে চাইলে */
    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);
    /* মেমোরি রিলিজ */
    free(description);
}

আউটপুট

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

realloc ছাড়া চেষ্টা করলে strcat() মেমোরি অভাবের কারণে এরর দেবে।

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

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

  3. সি ভাষায় মেমরি অপারেশন ফাংশনগুলো (Memory Operations)

  4. C প্রোগ্রামিং-এ স্ট্যাটিক মেমরি অ্যালোকেশন কি?