সংক্ষেপে
স্থির মেমরি বরাদ্দকরণ এবং গতিশীল মেমরি বরাদ্দকরণের জন্য একটি স্তূপ ব্যবহৃত হয়, উভয়ই কম্পিউটারের র্যামে সঞ্চিত।
বিস্তারিত
স্ট্যাক
স্ট্যাকটি একটি "লিফো" (সর্বশেষে, প্রথম আউট) ডেটা স্ট্রাকচার, এটি সিপিইউ দ্বারা বেশ কাছাকাছিভাবে পরিচালনা এবং অনুকূলিত হয়। প্রতিবার কোনও ফাংশন একটি নতুন ভেরিয়েবল ঘোষণা করার সময়, এটি স্ট্যাকের উপরে "ধাক্কা" দেওয়া হয়। তারপরে যখনই কোনও ফাংশনটি প্রস্থান করে, সেই ফাংশনটির মাধ্যমে স্ট্যাকের দিকে ধাক্কা দেওয়া সমস্ত ভেরিয়েবলগুলি মুক্ত হয়ে যায় (এর অর্থ এটি মুছে ফেলা হয়)। একবার স্ট্যাক ভেরিয়েবল মুক্ত হয়ে গেলে সেই মেমরির অঞ্চলটি অন্যান্য স্ট্যাক ভেরিয়েবলের জন্য উপলব্ধ হয়ে যায়।
ভেরিয়েবলগুলি স্টোর করার জন্য স্ট্যাকটি ব্যবহার করার সুবিধাটি হ'ল মেমরিটি আপনার জন্য পরিচালিত হয়। আপনাকে নিজের হাতে মেমরি বরাদ্দ করতে হবে না, বা একবার আপনার আর প্রয়োজন না হলে এটি মুক্ত করুন। আরও কী, কারণ সিপিইউ স্ট্যাক মেমোরিটিকে এত দক্ষতার সাথে সংগঠিত করে, স্ট্যাক ভেরিয়েবলগুলি থেকে পড়া এবং লেখা খুব দ্রুত।
আরও পাওয়া যাবে এখানে ।
গাদা
হিপ আপনার কম্পিউটারের মেমরির এমন একটি অঞ্চল যা আপনার জন্য স্বয়ংক্রিয়ভাবে পরিচালিত হয় না এবং সিপিইউ দ্বারা দৃ tight়ভাবে পরিচালিত হয় না। এটি মেমরির একটি আরও মুক্ত-ভাসমান অঞ্চল (এবং আরও বড়)। স্তূপে মেমরি বরাদ্দ করতে, আপনাকে অবশ্যই ম্যালোক () বা কলোক () ব্যবহার করতে হবে যা অন্তর্নির্মিত সি ফাংশনগুলি রয়েছে। একবার আপনি স্তূপে মেমরি বরাদ্দের পরে, একবার আর আপনার আর প্রয়োজন না হলে সেই মেমরিটি হ্রাস করতে ফ্রি () ব্যবহার করার জন্য আপনি দায়বদ্ধ।
আপনি যদি এটি করতে ব্যর্থ হন তবে আপনার প্রোগ্রামটিতে মেমরি ফুটো হিসাবে পরিচিত have অর্থাৎ, গাদাতে থাকা মেমরিটি এখনও আলাদা করা হবে (এবং অন্যান্য প্রক্রিয়াগুলিতে উপলব্ধ হবে না)। আমরা ডিবাগিং বিভাগে যেমন দেখব, সেখানে ভ্যালগ্রাইন্ড নামে একটি সরঞ্জাম রয়েছে যা আপনাকে মেমরি ফাঁস সনাক্ত করতে সহায়তা করতে পারে।
স্ট্যাকের বিপরীতে, গাদাটির পরিবর্তনশীল আকারের উপর আকারের বিধিনিষেধ নেই (আপনার কম্পিউটারের সুস্পষ্ট শারীরিক সীমাবদ্ধতা বাদে)। হিপ মেমরিটি পড়তে এবং এগুলিতে লিখিতভাবে পড়ার জন্য কিছুটা ধীর হয় কারণ গাদাটিতে মেমরিটি অ্যাক্সেস করতে পয়েন্টার ব্যবহার করতে হয়। আমরা শীঘ্রই পয়েন্টার সম্পর্কে কথা বলতে হবে।
স্ট্যাকের বিপরীতে, গাদাতে তৈরি ভেরিয়েবলগুলি আপনার প্রোগ্রামের যে কোনও জায়গায়, যে কোনও ফাংশন দ্বারা অ্যাক্সেসযোগ্য। গাদা ভেরিয়েবলগুলি মূলত বিশ্বব্যাপী স্কোপ।
আরও পাওয়া যাবে এখানে ।
স্ট্যাকের বরাদ্দকৃত ভেরিয়েবলগুলি সরাসরি মেমোরিতে সংরক্ষণ করা হয় এবং এই মেমরিটিতে অ্যাক্সেস খুব দ্রুত হয় এবং প্রোগ্রামটি সংকলিত হওয়ার সাথে সাথে এর বরাদ্দকে মোকাবেলা করা হয়। যখন কোনও ফাংশন বা কোনও পদ্ধতি অন্য কোনও ফাংশনকে কল করে যা ঘুরে ফিরে অন্য ফাংশন ইত্যাদি কল করে, যখন খুব শেষ ফাংশনটির মান না ফেরায় ততক্ষণ all সমস্ত ফাংশন সম্পাদন স্থগিত থাকে। স্ট্যাকটি সর্বদা একটি LIFO অর্ডারে সংরক্ষিত থাকে, সর্বাধিক সংরক্ষিত ব্লক সর্বদা মুক্তি পেতে হবে পরবর্তী ব্লক। এটি স্ট্যাকের উপর নজর রাখা সত্যিই সহজ করে তোলে, স্ট্যাক থেকে একটি ব্লককে মুক্ত করা একটি পয়েন্টারকে সামঞ্জস্য করা ছাড়া আর কিছুই নয়।
গাদাতে বরাদ্দকৃত ভেরিয়েবলগুলির চালনার সময় তাদের মেমরি বরাদ্দ থাকে এবং এই মেমরিটিতে অ্যাক্সেস করা কিছুটা ধীর হয় তবে হিপ আকারটি ভার্চুয়াল মেমরির আকার দ্বারা সীমাবদ্ধ থাকে। স্তূপের উপাদানগুলির একে অপরের সাথে কোনও নির্ভরতা নেই এবং যে কোনও সময় এলোমেলোভাবে অ্যাক্সেস করা যায়। আপনি যে কোনও সময় একটি ব্লক বরাদ্দ করতে এবং যে কোনও সময় এটিকে ফ্রি করতে পারেন। এটি যে স্তূপের কোন অংশ নির্ধারিত সময়ে বরাদ্দ করা হয়েছে বা নিখরচায় রাখা হয়েছে তা ট্র্যাক করে রাখা আরও জটিল করে তোলে।
সংকলনের সময় আপনাকে ঠিক কতটা ডেটা বরাদ্দ করতে হবে তা সঠিকভাবে জেনে থাকলে আপনি স্ট্যাকটি ব্যবহার করতে পারেন এবং এটি খুব বেশি বড় নয়। রানটাইমের সময় আপনার ঠিক কতটা ডেটা প্রয়োজন হবে বা আপনার যদি প্রচুর পরিমাণে ডেটা বরাদ্দ করতে হয় তা ঠিক না জানলে আপনি হিপটি ব্যবহার করতে পারেন।
বহু-থ্রেড পরিস্থিতিতে প্রতিটি থ্রেডের নিজস্ব সম্পূর্ণ স্বতন্ত্র স্ট্যাক থাকবে তবে তারা গাদা ভাগ করবে। স্ট্যাকটি থ্রেড নির্দিষ্ট এবং হিপটি নির্দিষ্ট অ্যাপ্লিকেশন। স্ট্যাকটি ব্যতিক্রম হ্যান্ডলিং এবং থ্রেড মৃত্যুদন্ডের ক্ষেত্রে বিবেচনা করা গুরুত্বপূর্ণ।
প্রতিটি থ্রেড একটি স্ট্যাক পায়, যখন অ্যাপ্লিকেশনটির জন্য সাধারণত কেবলমাত্র একটি গাদা থাকে (যদিও বিভিন্ন ধরণের বরাদ্দের জন্য একাধিক স্তূপ রাখা অস্বাভাবিক নয়)।
রান-টাইমে, যদি অ্যাপ্লিকেশনটির আরও বেশি গাদা প্রয়োজন হয় তবে এটি ফ্রি মেমরি থেকে মেমরি বরাদ্দ করতে পারে এবং যদি স্ট্যাকের মেমরির প্রয়োজন হয় তবে এটি অ্যাপ্লিকেশনটির জন্য নিখরচায় মেমরি বরাদ্দ করা মেমরি থেকে মেমরি বরাদ্দ করতে পারে।
এমনকি, আরও বিশদ এখানে এবং এখানে দেওয়া হয় ।
এখন আপনার প্রশ্নের উত্তর আসুন ।
ওএস বা ভাষা রানটাইম দ্বারা তারা কতটা নিয়ন্ত্রণ করে?
থ্রেডটি তৈরি হওয়ার পরে প্রতিটি সিস্টেম-স্তরের থ্রেডের জন্য ওএস স্ট্যাক বরাদ্দ করে। অ্যাপ্লিকেশনটির হিপ বরাদ্দ করতে সাধারণত ভাষা রানটাইম দ্বারা ওএসকে ডাকা হয়।
আরও পাওয়া যাবে এখানে ।
তাদের সুযোগ কী?
ইতিমধ্যে শীর্ষে দেওয়া হয়েছে।
"সংকলনের আগে আপনার ঠিক কতটা ডেটা বরাদ্দ করতে হবে তা যদি আপনি জানেন তবে আপনি স্ট্যাকটি ব্যবহার করতে পারেন, এবং এটি খুব বেশি বড় নয় run রানটাইমে আপনার ঠিক কতটা ডেটা প্রয়োজন হবে তা আপনি যদি না জানেন তবে আপনি হিপটি ব্যবহার করতে পারেন বা যদি আপনাকে প্রচুর ডেটা বরাদ্দ করতে হবে।
আরও এখানে পাওয়া যাবে ।
এদের প্রত্যেকের আকার কী নির্ধারণ করে?
কোনও থ্রেড তৈরি হয়ে গেলে স্ট্যাকের আকার ওএস দ্বারা সেট করা হয় । হিপটির আকার অ্যাপ্লিকেশন শুরুতে সেট করা থাকে, তবে স্থান প্রয়োজন হিসাবে এটি বাড়তে পারে (বরাদ্দকারী অপারেটিং সিস্টেম থেকে আরও মেমরি অনুরোধ করে)।
কি দ্রুততর করে তোলে?
স্ট্যাক বরাদ্দ অনেক দ্রুত যেহেতু এটি যা যা করে তা স্ট্যাক পয়েন্টারটিকে সরিয়ে দেয়। মেমরি পুল ব্যবহার করে, আপনি গাদা বরাদ্দের তুলনায় তুলনামূলক কর্মক্ষমতা পেতে পারেন, তবে এটি সামান্য যুক্ত জটিলতা এবং তার নিজস্ব মাথা ব্যথার সাথে আসে।
এছাড়াও, স্ট্যাক বনাম হিপ কেবল একটি কার্যকারিতা বিবেচনা নয়; এটি আপনাকে প্রত্যাশিত আয়ুগুলির জীবনকাল সম্পর্কেও অনেক কিছু জানায়।
বিশদটি এখান থেকে পাওয়া যাবে ।