উদাহরণ সহ ডায়নামিক মেমোরি ব্যবহারের পদ্ধতি

ডাইনামিক মেমোরি ম্যানেজমেন্ট - সি প্রোগ্রামিং উদাহরণ (C Examples) - Computer Science

389

ডাইনামিক মেমোরি ব্যবহারের পদ্ধতি সি প্রোগ্রামিং ভাষায় খুবই গুরুত্বপূর্ণ, বিশেষত তখন যখন প্রোগ্রামের মেমোরি চাহিদা রানটাইমে পরিবর্তিত হয়। malloc(), calloc(), realloc(), এবং free() ফাংশনগুলো ব্যবহার করে মেমোরি বরাদ্দ এবং মুক্ত করা যায়। নিচে কিছু উদাহরণের মাধ্যমে ডাইনামিক মেমোরি ব্যবহারের পদ্ধতি দেখানো হলো।

১. malloc() ব্যবহার করে ডাইনামিক মেমোরি বরাদ্দ

malloc() ফাংশন দিয়ে ডাইনামিক মেমোরি বরাদ্দ করা হয় এবং এটি বরাদ্দকৃত মেমোরি ব্লকটি ইনিশিয়ালাইজ করে না। এখানে আমরা ৫টি ইন্টিজার রাখার জন্য মেমোরি বরাদ্দ করব।

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr;
    int n = 5;

    // ৫টি ইন্টিজারের জন্য ডাইনামিক মেমোরি বরাদ্দ
    arr = (int*)malloc(n * sizeof(int));

    if (arr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }

    // মান অ্যাসাইন ও প্রিন্ট
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
        printf("%d ", arr[i]);
    }

    // মেমোরি মুক্ত করা
    free(arr);

    return 0;
}

আউটপুট:

1 2 3 4 5

ব্যাখ্যা:

  • এখানে malloc() ব্যবহার করে ৫টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করা হয়েছে।
  • লুপের মাধ্যমে প্রতিটি ইন্টিজারে মান অ্যাসাইন ও প্রিন্ট করা হয়েছে।
  • শেষে free() ব্যবহার করে বরাদ্দকৃত মেমোরি মুক্ত করা হয়েছে।

২. calloc() ব্যবহার করে ডাইনামিক মেমোরি বরাদ্দ

calloc() ফাংশন মেমোরি বরাদ্দ করার পর সমস্ত ব্লককে শূন্য দিয়ে ইনিশিয়ালাইজ করে। এখানে ৫টি ইন্টিজারের মেমোরি বরাদ্দ করব এবং প্রতিটি মেমোরি ব্লক ইনিশিয়ালাইজ করা থাকবে।

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr;
    int n = 5;

    // ৫টি ইন্টিজারের জন্য ডাইনামিক মেমোরি বরাদ্দ এবং শূন্য দিয়ে ইনিশিয়ালাইজ
    arr = (int*)calloc(n, sizeof(int));

    if (arr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }

    // প্রিন্ট করা
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);  // প্রত্যেকটি মান শূন্য দেখাবে
    }

    // মেমোরি মুক্ত করা
    free(arr);

    return 0;
}

আউটপুট:

0 0 0 0 0

ব্যাখ্যা:

  • calloc() ব্যবহার করে ৫টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করা হয়েছে।
  • প্রতিটি মেমোরি ব্লক শূন্য দিয়ে ইনিশিয়ালাইজ করা হয়েছে।
  • শেষে free() ব্যবহার করে মেমোরি মুক্ত করা হয়েছে।

৩. realloc() ব্যবহার করে ডাইনামিক মেমোরি পুনরায় বরাদ্দ

realloc() ফাংশন পূর্বে বরাদ্দকৃত মেমোরি ব্লকের আকার পরিবর্তন করতে ব্যবহার করা হয়। এখানে শুরুতে ৩টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করা হবে, পরে realloc() ব্যবহার করে এটিকে ৫টি ইন্টিজারে বৃদ্ধি করা হবে।

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr;
    int n = 3;

    // প্রাথমিকভাবে ৩টি ইন্টিজারের জন্য মেমোরি বরাদ্দ
    arr = (int*)malloc(n * sizeof(int));

    if (arr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }

    // প্রথম ৩টি মান অ্যাসাইন করা
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
    }

    // মেমোরি ব্লক পুনরায় বরাদ্দ করে ৫টি ইন্টিজারের জন্য বাড়ানো
    n = 5;
    arr = (int*)realloc(arr, n * sizeof(int));

    if (arr == NULL) {
        printf("Memory reallocation failed!\n");
        return 1;
    }

    // নতুন ২টি মান অ্যাসাইন করা
    arr[3] = 4;
    arr[4] = 5;

    // সকল মান প্রিন্ট করা
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }

    // মেমোরি মুক্ত করা
    free(arr);

    return 0;
}

আউটপুট:

Copy code

1 2 3 4 5

ব্যাখ্যা:

  • প্রাথমিকভাবে malloc() ব্যবহার করে ৩টি ইন্টিজারের জন্য মেমোরি বরাদ্দ করা হয়েছে।
  • পরে realloc() ব্যবহার করে মেমোরির আকার বাড়িয়ে ৫টি ইন্টিজারের জন্য করা হয়েছে।
  • শেষে free() ব্যবহার করে মেমোরি মুক্ত করা হয়েছে।

৪. free() ব্যবহার করে মেমোরি মুক্ত করা

ডাইনামিক মেমোরি ব্যবহারের পরে মেমোরি লিক প্রতিরোধে free() ফাংশন ব্যবহার করে মেমোরি মুক্ত করতে হয়। এটি সিস্টেমে মেমোরি পুনরায় ব্যবহারযোগ্য করে তোলে।

#include <stdio.h>
#include <stdlib.h>

int main() {
    int *arr;
    int n = 5;

    // মেমোরি বরাদ্দ করা
    arr = (int*)malloc(n * sizeof(int));

    if (arr == NULL) {
        printf("Memory allocation failed!\n");
        return 1;
    }

    // মেমোরি ব্যবহার
    for (int i = 0; i < n; i++) {
        arr[i] = i + 1;
    }

    // মেমোরি মুক্ত করা
    free(arr);

    // মেমোরি মুক্ত করার পর পুনরায় ব্যবহার এড়িয়ে চলা উচিত

    return 0;
}

ব্যাখ্যা:

  • free() ফাংশন দিয়ে মেমোরি মুক্ত করা হয়েছে, যাতে সিস্টেমের মেমোরি পুনরায় ব্যবহারযোগ্য হয়।

সারসংক্ষেপ

  • malloc(): নির্দিষ্ট পরিমাণ মেমোরি বরাদ্দ করে কিন্তু ইনিশিয়ালাইজ করে না।
  • calloc(): নির্দিষ্ট সংখ্যা ব্লকের মেমোরি বরাদ্দ করে এবং শূন্য দিয়ে ইনিশিয়ালাইজ করে।
  • realloc(): পূর্বে বরাদ্দকৃত মেমোরির আকার পরিবর্তন করে।
  • free(): ডাইনামিক্যালি বরাদ্দকৃত মেমোরি মুক্ত করে।

ডাইনামিক মেমোরি ব্যবহারের এই পদ্ধতিগুলো সি প্রোগ্রামিংয়ে মেমোরি ব্যবহারের কার্যকারিতা বৃদ্ধি করে এবং বড় আকারের ডেটা ম্যানেজমেন্টে সহায়ক হয়।

Content added By
Promotion

Are you sure to start over?

Loading...