প্যাসক্যাল ভাষায় Dynamic Memory Allocation একটি গুরুত্বপূর্ণ ধারণা যা প্রোগ্রামের রানটাইমে মেমরি বরাদ্দ এবং মুক্ত করার সুযোগ দেয়। এটি প্রোগ্রামের ফ্লেক্সিবিলিটি বাড়ায়, কারণ প্রোগ্রাম লেখার সময় পূর্বনির্ধারিত মেমরি আকার নির্ধারণ করার প্রয়োজন পড়ে না। ডাইনামিক মেমরি অ্যালোকেশন পদ্ধতি ব্যবহার করে, প্রোগ্রাম মেমরি প্রয়োজন অনুসারে বরাদ্দ বা মুক্ত করতে পারে।
প্যাসক্যালের new এবং dispose ফাংশন দুটি ডাইনামিক মেমরি অ্যালোকেশন এবং ডিলোকেশন পরিচালনার জন্য ব্যবহৃত হয়।
new ফাংশন
new ফাংশনটি একটি পয়েন্টার (pointer) জন্য ডাইনামিকভাবে মেমরি বরাদ্দ করার জন্য ব্যবহৃত হয়। এটি একটি নির্দিষ্ট টাইপের জন্য মেমরি বরাদ্দ করে এবং সেই বরাদ্দকৃত মেমরির ঠিকানা পয়েন্টারের মাধ্যমে প্রাপ্ত হয়।
গঠন:
new(pointer_variable);এখানে:
pointer_variable: এটি একটি পয়েন্টার ভেরিয়েবল, যা ডাইনামিকভাবে বরাদ্দ করা মেমরির ঠিকানা ধারণ করে।
উদাহরণ:
program DynamicMemoryAllocationExample;
type
TInteger = ^Integer; // পয়েন্টার টাইপ ঘোষণা
var
num: TInteger; // পয়েন্টার ভেরিয়েবল ঘোষণা
begin
new(num); // ডাইনামিক মেমরি বরাদ্দ
num^ := 10; // পয়েন্টারের মাধ্যমে মান সেট করা
writeln('Value: ', num^); // মেমরি থেকে মান প্রিন্ট করা
dispose(num); // বরাদ্দকৃত মেমরি মুক্ত করা
end.এখানে:
new(num)দ্বারাnumপয়েন্টারটির জন্য মেমরি বরাদ্দ করা হয়েছে।num^ := 10;দ্বারা বরাদ্দকৃত মেমরিতে মান দেয়া হয়েছে।writeln(num^);দ্বারা সেই মেমরি থেকে মানটি প্রিন্ট করা হয়েছে।
dispose ফাংশন
dispose ফাংশনটি একটি পয়েন্টার ভেরিয়েবলের জন্য বরাদ্দ করা মেমরি মুক্ত করতে ব্যবহৃত হয়। যখন আর মেমরির প্রয়োজন না থাকে, তখন মেমরি ফ্রি করার জন্য dispose ব্যবহার করা উচিত। এটি মেমরি লিক (memory leak) এড়াতে সহায়তা করে।
গঠন:
dispose(pointer_variable);এখানে:
pointer_variable: এটি সেই পয়েন্টার ভেরিয়েবল যা ডাইনামিক মেমরি বরাদ্দ করেছিল এবং যেটি এখন মেমরি মুক্ত করার জন্য ব্যবহৃত হবে।
উদাহরণ:
program DisposeExample;
type
TInteger = ^Integer; // পয়েন্টার টাইপ ঘোষণা
var
num: TInteger; // পয়েন্টার ভেরিয়েবল ঘোষণা
begin
new(num); // ডাইনামিক মেমরি বরাদ্দ
num^ := 20; // পয়েন্টারের মাধ্যমে মান সেট করা
writeln('Value before dispose: ', num^); // মেমরি থেকে মান প্রিন্ট করা
dispose(num); // বরাদ্দকৃত মেমরি মুক্ত করা
writeln('Memory has been freed.');
end.এখানে:
dispose(num);ব্যবহার করে বরাদ্দকৃত মেমরি মুক্ত করা হয়েছে।- মেমরি মুক্ত করার পর, পয়েন্টারটি আর ব্যবহৃত হতে পারবে না, কারণ মেমরি মুক্ত করার পর তা অবৈধ হয়ে যায়।
new এবং dispose এর সুবিধা
১. ফ্লেক্সিবিলিটি: ডাইনামিক মেমরি বরাদ্দ করে, আপনি যখন প্রয়োজন তখনই মেমরি বরাদ্দ করতে পারেন এবং শেষ হলে মুক্ত করতে পারেন। এটি প্রোগ্রামের মেমরি ব্যবস্থাপনাকে আরও কার্যকর করে।
২. মেমরি সঞ্চয়: প্রয়োজনীয় মেমরি বরাদ্দ করে এবং কাজ শেষ হলে তা মুক্ত করার মাধ্যমে আপনি মেমরি সঞ্চয় করতে পারেন, বিশেষত বড় প্রোগ্রাম এবং অ্যাপ্লিকেশনগুলিতে।
৩. বড় ডাটা স্ট্রাকচার: ডাইনামিক মেমরি ব্যবহার করে বড় আকারের ডাটা স্ট্রাকচার যেমন লিঙ্কড লিস্ট, ট্রী, গ্রাফ ইত্যাদি তৈরি করা যায়।
সারাংশ
প্যাসক্যাল ভাষায় new এবং dispose ফাংশন ব্যবহার করে আপনি ডাইনামিক মেমরি অ্যালোকেশন এবং ডিলোকেশন করতে পারেন। new ফাংশন মেমরি বরাদ্দ করে এবং পয়েন্টারকে সেই মেমরির ঠিকানা প্রদান করে, আর dispose ফাংশন সেই মেমরি মুক্ত করে। এই পদ্ধতিটি মেমরি ব্যবস্থাপনা এবং কর্মক্ষমতা বাড়াতে সাহায্য করে, বিশেষত বড় প্রোগ্রাম এবং ডাটা স্ট্রাকচারের ক্ষেত্রে।
Read more