PDA

View Full Version : راه مقابله با stack overflow چیه؟



sha8046
دوشنبه 28 فروردین 1391, 17:54 عصر
یه تابع بازگشتی داریم که باید بمقدار زیاد فراخوانی بشه ولی پشته سر ریز میکنه . چکار باید کرد ؟

p.yazdkhasti
دوشنبه 28 فروردین 1391, 18:45 عصر
سلام
سعی نمایید تابع بازگشتی را تغییر دهید و با استفاده از کلاس Stack<T> آن را پیاده سازی کنید. در غیر این صورت نرم افزار خود را باید بر روی دستگاه 64 بیتی اجرا نمایید تا JIT Compiler بعد از کامپایل کد شما را برای Recursion بهبود دهد. می توانید تابع بازگشتی خود را ارسال نمایید تا آن را برای شما با استفاده از کلاس Stack تغییر دهم.

barnamenevisforme
دوشنبه 28 فروردین 1391, 19:00 عصر
سلام
در باره این مورد موضوع های زیادی در همین سایت موجوده.از جمله یکی از اونا افزایش stack در C#‎ (http://barnamenevis.org/showthread.php?285958-افزایش-stack-در-c)

masoudmok
دوشنبه 28 فروردین 1391, 22:25 عصر
استفاده از روش بازگشتی یه تکنیک از بالا به پایینه توی طراحی الگوریتم .
با استفاده از روش های پایین به بالا می تونی همون کارو با حافظه ی کمتر انجام بدی

p.yazdkhasti
دوشنبه 28 فروردین 1391, 23:46 عصر
سلام
افزایش حافظه Stack روش درستی نیست به دلیل اینکه مشخص نیست دقیقا تابع شما به چه مقدار از آن نیاز دارد و با تغییر پارامتر های تابع آن نیز تغییر می کند. تغییر نحوه پیاده سازی تابع و یا اجرای آن برای یک دستگاه 64 بیت بهترین راه حل های موجود هستند.

sha8046
سه شنبه 29 فروردین 1391, 13:56 عصر
دوستان ممنون که وقت گذاشتید . راستش من زیاد معماری کامپیوتر بلد نیستم یعنی کامپایل باید با یه سیستم عامل 64 بیتی باشه یا سی پی یو 64 بیت ؟

و اینکه تا چند برابر حجم استک توی 64 بیت بیشتر از 32 بیت هست ؟

البته من نسخه غیربازگشتی این تابع رو هم نوشتم ولی خیلی کدهاش زیاد میشه .

اون تابع مورد نظر در حقیقت همون تابع پر کردن یه جسم تو پر با یه رنگ هست که چهار پیکسل کناری رو بطور بازگشتی فرا میخونه :


public void sum_func(int i, int j)
{



if (رنگ پیکسل سیاه باشه)
{
plak.SetPixel(i, j, Color.Yellow);

}

if ( پیکس فعلی سیاه باشد) sum_func(i, j - 1);
if ( پیکس فعلی سیاه باشد ) sum_func(i - 1, j);
if ( پیکس فعلی سیاه باشد ) sum_func(i + 1, j);
if ( پیکس فعلی سیاه باشد) sum_func(i, j + 1);
}