C++ এ Dynamic Memory Allocation প্রোগ্রাম চলাকালীন সময়ে মেমোরি বরাদ্দ এবং মুক্ত করার একটি প্রক্রিয়া। এটি তখন ব্যবহার করা হয় যখন প্রোগ্রামিংয়ের সময় মেমোরির আকার আগে থেকে জানা যায় না এবং প্রোগ্রাম চলাকালীন সময়ে মেমোরি বরাদ্দের প্রয়োজন হয়। C++ এ new এবং delete কীওয়ার্ড ব্যবহার করে মেমোরি ডাইনামিক্যালি বরাদ্দ এবং মুক্ত করা যায়।
new কীওয়ার্ড
new কীওয়ার্ড ব্যবহার করে ডাইনামিক মেমোরি বরাদ্দ করা হয়। এটি নির্দিষ্ট একটি ডেটা টাইপের জন্য মেমোরি বরাদ্দ করে এবং একটি পয়েন্টার রিটার্ন করে, যা বরাদ্দকৃত মেমোরির প্রথম অবস্থান নির্দেশ করে।
new এর বৈশিষ্ট্যসমূহ:
- এটি একটি ডাইনামিক মেমোরি এলোকেটর, যা হিপ মেমোরি থেকে মেমোরি বরাদ্দ করে।
- এটি সফলভাবে মেমোরি বরাদ্দ করলে পয়েন্টার রিটার্ন করে, নতুবা ব্যতিক্রম (exception) ছুঁড়ে দেয়।
উদাহরণ: new ব্যবহার করে একক ভেরিয়েবল বরাদ্দ করা
#include <iostream>
int main() {
int* ptr = new int; // একটি ইন্টিজার জন্য ডাইনামিক মেমোরি বরাদ্দ
*ptr = 10; // বরাদ্দকৃত মেমোরি তে মান সংরক্ষণ
std::cout << "Value: " << *ptr << std::endl; // আউটপুট: 10
delete ptr; // মেমোরি মুক্ত করা
return 0;
}এখানে new int দ্বারা একক ইন্টিজার টাইপ মেমোরি বরাদ্দ করা হয়েছে এবং delete দ্বারা সেই মেমোরি মুক্ত করা হয়েছে।
delete কীওয়ার্ড
delete কীওয়ার্ড ব্যবহার করে ডাইনামিক্যালি বরাদ্দকৃত মেমোরি মুক্ত করা হয়। এটি হিপ মেমোরিতে থাকা পূর্বে বরাদ্দকৃত মেমোরি ডিলিট করে, যাতে মেমোরি লিক না হয়।
delete এর বৈশিষ্ট্যসমূহ:
- এটি
newদ্বারা বরাদ্দকৃত মেমোরি মুক্ত করার জন্য ব্যবহৃত হয়। - এটি মেমোরি লিক প্রতিরোধ করতে সাহায্য করে।
উদাহরণ: delete ব্যবহার করে মেমোরি মুক্ত করা
#include <iostream>
int main() {
int* ptr = new int(20); // একটি ইন্টিজার জন্য মেমোরি বরাদ্দ এবং মান 20 সেট করা
std::cout << "Value: " << *ptr << std::endl; // আউটপুট: 20
delete ptr; // বরাদ্দকৃত মেমোরি মুক্ত করা
return 0;
}ডাইনামিক অ্যারের জন্য new এবং delete[] ব্যবহার
ডাইনামিক অ্যারের জন্য new এবং delete[] ব্যবহার করা হয়। ডাইনামিক অ্যারে মেমোরি বরাদ্দের সময়ই তার আকার নির্ধারণ করা যায় এবং অ্যারেতে ডেটা সংরক্ষণ করা সম্ভব।
উদাহরণ: ডাইনামিক অ্যারে বরাদ্দ এবং মুক্ত করা
#include <iostream>
int main() {
int size;
std::cout << "Enter size of array: ";
std::cin >> size;
int* arr = new int[size]; // ডাইনামিক অ্যারের জন্য মেমোরি বরাদ্দ
// ডাইনামিক অ্যারে ইনিশিয়ালাইজ করা
for (int i = 0; i < size; i++) {
arr[i] = i + 1;
}
// অ্যারের মান প্রিন্ট করা
std::cout << "Array elements: ";
for (int i = 0; i < size; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
delete[] arr; // ডাইনামিক অ্যারের জন্য মেমোরি মুক্ত করা
return 0;
}আউটপুট:
Enter size of array: 5
Array elements: 1 2 3 4 5এখানে, ব্যবহারকারীর কাছ থেকে অ্যারের আকার নেওয়া হয়েছে এবং সেই আকার অনুযায়ী ডাইনামিক্যালি মেমোরি বরাদ্দ করা হয়েছে। পরে delete[] ব্যবহার করে মেমোরি মুক্ত করা হয়েছে।
মেমোরি লিক প্রতিরোধ
ডাইনামিক মেমোরি ব্যবহারের সময় delete বা delete[] ব্যবহার না করলে মেমোরি লিক হতে পারে, যার ফলে প্রোগ্রামের মেমোরি ব্যবহারের পরিমাণ ধীরে ধীরে বাড়তে থাকে। এ কারণেই ডাইনামিক মেমোরি ব্যবহারের পর মেমোরি মুক্ত করা গুরুত্বপূর্ণ।
#include <iostream>
void memoryLeakExample() {
int* ptr = new int(100); // মেমোরি বরাদ্দ করা
// delete ptr; // মেমোরি মুক্ত না করার কারণে মেমোরি লিক হবে
}
int main() {
for (int i = 0; i < 1000; i++) {
memoryLeakExample();
}
return 0;
}উপরের কোডে delete ব্যবহার না করার কারণে প্রতিবার মেমোরি বরাদ্দ হলেও মেমোরি মুক্ত না হওয়ায় মেমোরি লিক হয়। এটি প্রতিরোধ করতে delete ব্যবহার করা উচিত।
উপসংহার
newকীওয়ার্ড ব্যবহার করে ডাইনামিক মেমোরি বরাদ্দ করা হয়।deleteকীওয়ার্ড ব্যবহার করে বরাদ্দকৃত মেমোরি মুক্ত করা হয়।- ডাইনামিক মেমোরি ব্যবহারের পর
deleteবাdelete[]ব্যবহার করা উচিত, যাতে মেমোরি লিক না হয়। - ডাইনামিক মেমোরি ব্যবহারে সতর্ক থাকতে হবে এবং মেমোরি মুক্ত করার দায়িত্ব প্রোগ্রামারের।
C++ এ new এবং delete ব্যবহার করে মেমোরি ম্যানেজমেন্ট করা প্রোগ্রামিং দক্ষতা উন্নয়নে গুরুত্বপূর্ণ, কারণ এটি বড় এবং জটিল প্রোগ্রাম তৈরিতে সহায়ক।
Read more