একমাত্র বৈধ উত্তরটি অস্পষ্ট: "স্ট্যাক যখন উপচে পড়ে যায় তখন খুব বেশি হয়।"
আপনি যদি প্রোগ্রামের এন্ট্রি পয়েন্ট এবং প্রশ্নযুক্ত ক্রিয়াকলাপের মধ্যে কোডের প্রতিটি লাইন প্রয়োগের উপর সম্পূর্ণ নিয়ন্ত্রণে না থাকেন তবে আপনি কত স্ট্যাক উপলব্ধ সে সম্পর্কে কোনও অনুমান করতে পারবেন না। উদাহরণস্বরূপ, আপনি গ্যারান্টি দিতে পারবেন না যে এই ফাংশনটি কল করা কখনই কোনও স্ট্যাকের উপচে পড়বে না:
void break_the_camels_back()
{
int straw;
...
}
আধুনিক ইউনিক্সগুলিতে ডিফল্ট 8 এমআইবি স্ট্যাকটি স্ট্যাকগুলি যাওয়ার জন্য যথেষ্ট পরিমাণে রয়েছে, বিশেষত আমার মতো এমন কারও কাছে যারা 8-বিট স্ট্যাক পয়েন্টার সহ সিপিইউগুলি মনে রাখার জন্য যথেষ্ট গিজার রাখেন। ব্যবহারিক বাস্তবতা হ'ল আপনি চেষ্টা না করেই এর মধ্য দিয়ে ফুরিয়ে যাওয়ার সম্ভাবনা নেই। যদি আপনি এটি করেন তবে স্ট্যাকের সীমা অতিক্রম করা সাধারণত বিভাগের লঙ্ঘন হিসাবে বিবেচিত হয় এবং এটি সনাক্ত করার জন্য পর্যাপ্ত মেমরির ব্যবস্থা থাকা সিস্টেমগুলি SIGSEGV
যখন এটি ঘটে তখন তা প্রেরণ করবে ।
আপনার কাছে কয়েকটি বিকল্প রয়েছে। প্রথমটি হ'ল কত স্ট্যাক পাওয়া যায় তা অনুমান করা এবং সিস্টেমটিকে জিজ্ঞাসা করা। পসিক্সে মেনে চলতে পারে এমন কোনও getrlimit(2)
কিছুর একটি ফাংশন থাকবে যা আপনাকে উপরের সীমাটি বলবে। RLIMIT_STACK
আপনার সুনির্দিষ্ট সীমাটি। দ্বিতীয়টি হ'ল আপনার প্রোগ্রামগুলি কতটা স্ট্যাক ব্যবহার করছে তা নিরীক্ষণ করা এবং তার ভিত্তিতে স্বয়ংক্রিয় ভেরিয়েবল বনাম গতিশীল মেমরির বরাদ্দ সম্পর্কে সিদ্ধান্ত নেওয়া। আমি যতদূর জানি, স্ট্যাকের পরিমাণটি কীভাবে ব্যবহৃত হবে তা নির্ধারণের জন্য কোনও মানক ফাংশন নেই, তবে প্রোগ্রামগুলি valgrind
আপনার জন্য এটি বিশ্লেষণ করতে পারে।