نمایش نتایج 1 تا 6 از 6

نام تاپیک: راه مقابله با stack overflow چیه؟

  1. #1

    راه مقابله با stack overflow چیه؟

    یه تابع بازگشتی داریم که باید بمقدار زیاد فراخوانی بشه ولی پشته سر ریز میکنه . چکار باید کرد ؟

  2. #2
    کاربر دائمی آواتار p.yazdkhasti
    تاریخ عضویت
    فروردین 1391
    محل زندگی
    http://devnet.ir
    پست
    121

    نقل قول: راه مقابله با stack overflow چیه؟

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

  3. #3
    کاربر دائمی آواتار barnamenevisforme
    تاریخ عضویت
    بهمن 1390
    محل زندگی
    تهران،شیراز و میشه گفت تقریبا همه جای ایران
    پست
    683

    نقل قول: راه مقابله با stack overflow چیه؟

    سلام
    در باره این مورد موضوع های زیادی در همین سایت موجوده.از جمله یکی از اونا افزایش stack در C#‎‎

  4. #4
    کاربر دائمی آواتار masoudmok
    تاریخ عضویت
    مهر 1385
    محل زندگی
    esf
    پست
    229

    نقل قول: راه مقابله با stack overflow چیه؟

    استفاده از روش بازگشتی یه تکنیک از بالا به پایینه توی طراحی الگوریتم .
    با استفاده از روش های پایین به بالا می تونی همون کارو با حافظه ی کمتر انجام بدی

  5. #5
    کاربر دائمی آواتار p.yazdkhasti
    تاریخ عضویت
    فروردین 1391
    محل زندگی
    http://devnet.ir
    پست
    121

    نقل قول: راه مقابله با stack overflow چیه؟

    سلام
    افزایش حافظه Stack روش درستی نیست به دلیل اینکه مشخص نیست دقیقا تابع شما به چه مقدار از آن نیاز دارد و با تغییر پارامتر های تابع آن نیز تغییر می کند. تغییر نحوه پیاده سازی تابع و یا اجرای آن برای یک دستگاه 64 بیت بهترین راه حل های موجود هستند.

  6. #6

    نقل قول: راه مقابله با stack overflow چیه؟

    دوستان ممنون که وقت گذاشتید . راستش من زیاد معماری کامپیوتر بلد نیستم یعنی کامپایل باید با یه سیستم عامل 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);
    }


قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •