PDA

View Full Version : Stack Over Flow



Mah6447
دوشنبه 02 مهر 1386, 09:38 صبح
چگونه می توان از حلش کرد
ایا راهی برای خالی کردن Ram بدون ریست وجود دارد؟

vcldeveloper
دوشنبه 02 مهر 1386, 15:28 عصر
چگونه می توان از حلش کرد
؟!!!


---------------

m-khorsandi
دوشنبه 02 مهر 1386, 17:17 عصر
مشکلت جای دیگه‌اس، Ramرو بیخیال شو!

Mahmood_M
دوشنبه 02 مهر 1386, 19:45 عصر
من هم تقریبا همچین سئوالی دارم ... !
چطور میشه به حافظه رم دسترسی داشت و اون رو خالی کرد ، حتما موقع کار با XP دیدید که بعد از مدتی کار کردن بعضی چیزها اجرا نمی شن ، مخصوصا اگه تعداد زیادی IE باز باشه ( مخصوصا با صفحه های پر عکس ) ...

من میخوام وقتی رم به این وضعیت افتاد ، اون رو خالی کنم ،‌شاید صورت سئوالم درست نباشه !! ...
برنامه ها در هنگام اجرا مقداری از حافظه رو اشغال میکنن ولی وقتی که بسته میشن انگار باز هم فضای حافظه رم اشغال شده هست ،‌دیگه نمیشه چیزی رو اجرا کرد و باید سیستم رو راه اندازی مجدد کنیم ...
آیا راهی هست که بشه به رم دسترسی داشت و حافظه رو خالی کرد ، البته قسمتهایی از حافظه که چیزی توش لود نباشه ...

اگه سئوال غلطه لطفا بگید و اگه راهی هم هست خوشحال می شم راهنماییم کنید ...

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

موفق باشید ...

Delphi Skyline
دوشنبه 02 مهر 1386, 22:15 عصر
تو ویندوز تو با برنامه ای که با دلفی می نویسی به تنهایی نمی تونی به کل رم دسترسی داشته باشی چون تو در مدل مدیریت حافظه Flat هستی . برای برنامه تو فقط یه قسمت رم قابل Access کردن می باشد . بعضی از برنامه ها وقتی اجرا میشن چند پروسه دیگه و یا سرویس ها رو هم راه می اندازن که بستن پروسه اول پروسه های بعدی رو نمی بنده . تو برای خالی کردن حافظه باید از API هایی که در رابطه با Exit Process هستن استفاده کنی و اون پروسه رو ببندی .

Mahmood_M
دوشنبه 02 مهر 1386, 22:32 عصر
تو برای خالی کردن حافظه باید از API هایی که در رابطه با Exit Process هستن استفاده کنی و اون پروسه رو ببندی .
ممنون ...
از کجا بفهمم کدام پروسه باید بسته بشه ، چطور میشه فهمید که آیا پروسه در حال اجرا هست یا اینکه می توان آن را بست ؟!
فرض میکنیم لیست پروسه ها رو دارم ، چطور چک کنم که فلان پروسه باید بسته بشه یا نباید بسته بشه ؟! ( یعنی اگه بسته بشه مشکلی در اجرای سایر پروسه های در حال اجرا پیش میاد )

باز هم اگه صورت سئوالم غلطه معذرت میخوام ... !

Delphi Skyline
سه شنبه 03 مهر 1386, 14:04 عصر
پروسه های سیستمی رو که سیستم حفاضت میکنه و نمی شه بستش . بقیش رو هم تو باید اطلاعاتی در مورد پروسه داشته باشی که چیکار میکنه می تونی لیستی از برنامه هایی رو که AutoStart هستن رو از حالت Auto Start خارج کنی تا با بالا آمدن مجدد ویندوز اونا اجرا نشن .

Hamid.Kad
سه شنبه 03 مهر 1386, 14:34 عصر
اگه برنامه ای رو نیاز نداریم که با بستن اون میشه فضای حافظه رو پس گرفت.
شاید کندی سرعت پس از اجرای چند برنامه و بستن اونها بدلیل مشکل fragmentation ی باشه که در ram بوجود میاد که اون رو هم میشه با برنامه های مربوط به این کار برطرف کرد.
(هر چند من خوذم ترجیح میدم از این برنامه ها بدلیل زمان اجرای نسبتاً طولانیشون استفاده نکنم و کندی سیستم رو تحمل کنم ! )

البته خود سیستم عامل xp هم تا اونجا که من میدونم این کار رو در مواقع idle انجام میده

Will_Smith
سه شنبه 03 مهر 1386, 15:26 عصر
خالی کردن Ram اصولا بی معنیه.چون Ram همیشه پر هست البته نه پر از اطلاعات مفید قسمت هایی که ما بهشون میگیم خالی , در حقیقت حاوی اطلاعات نامشخصی هست
برای افزایش سرعت سیستم عامل باید برنامه هایی رو که حافظه زیادی اشغال کردن رو از حافظه خارج کنیم

Mah6447
سه شنبه 03 مهر 1386, 15:31 عصر
سلام
از دوستان متشکرم که اینگونه پاسخگوی سوالات هستند.
دقیق تر بگویم. یکی از برنامه ای که من نوشتم در پایان پیغام Stack Over Flow
می دهد و نمی دانیم با این مشکل چکار کنم من حدس می زنم که حافظه سیستم پر
می شود بنابراین سوال دوم این بودن آیا در حین اجرای برنامه می توان حافظه را
خالی کرد یا خیر.

Delphi Skyline
سه شنبه 03 مهر 1386, 22:24 عصر
پیامی مبتنی بر Stack Over Flow راجع به پر شدن رم نیست چون رم به اندازه کافی جا برای برنامه شما و استکش داره . این پیغام زمان های دیگری بوجود میاد از قبیل دسترسی به عنصری خارج از استک .

vcldeveloper
چهارشنبه 04 مهر 1386, 06:18 صبح
قیق تر بگویم. یکی از برنامه ای که من نوشتم در پایان پیغام Stack Over Flow
می دهد و نمی دانیم با این مشکل چکار کنم من حدس می زنم که حافظه سیستم پر
می شود بنابراین سوال دوم این بودن آیا در حین اجرای برنامه می توان حافظه را
خالی کرد یا خیر.
مدیر حافظه ویندوز 2 گیگابایت حافظه مجازی در اختیار برنامه شما میزاره و عملا برنامه شما کنترلی بر روی RAM سیستم نخواهد داشت، بلکه با همون حافظه مجازی کار میکنه و مدیر حافظه ویندوز در صورت نیاز آدرس های داخل حافظه مجازی پروسس شما را به آدرس های فیزیکی روی رم Map می کنه.
پیغام Stack Overflow همونطور که از متنش هم پیدا ست، یعنی فضای Stack اختصاص داده شده به برنامه شما پر شده و سرریز کرده. معمولا یکی از دلایل شایع این خطا، استفاده از توابع بازگشتی است که به بارها خودشون خودشان را فراخوانی می کنند. البته ممکنه علت های دیگه هم داشته باشه.
با توجه به اینکه میگید در پایان اجرای برنامه این خطا رخ میده، می تونید Break Point هایی در سورس قرار بدید که ببینید چه کدی در زمان بسته شدن برنامه این خطا را ایجاد میکنه.

Will_Smith
پنج شنبه 05 مهر 1386, 09:43 صبح
برخوی موارد هم باگ هایی که در کامپایلر دلفی وجود داره باعث ایجاد خطاهای عجیب و غریبی در برنامه میشه.من بارها با این خطاها مواجه شدم.البته این مورد اصلا عجیب نیست و حتما دلیل خاصی داره

ghabil
پنج شنبه 05 مهر 1386, 10:36 صبح
در ادامه پست آقای کشاورز، هرجایی از کدت که Loop داری، بخصوص از نوع while یا repeat اگر حالتی پیش بیاد که این لوپها بی پایان بشند و شرطشون اجرا نشه این خطا رو میگیری و معمولا هم این خطا از این مشکل یا همون توابع ریکرسیو بوجود میاد.

Delphi Skyline
پنج شنبه 05 مهر 1386, 13:14 عصر
برخوی موارد هم باگ هایی که در کامپایلر دلفی وجود داره باعث ایجاد خطاهای عجیب و غریبی در برنامه میشه.من بارها با این خطاها مواجه شدم.البته این مورد اصلا عجیب نیست و حتما دلیل خاصی دارهمثلا ؟؟؟؟؟؟ کامپایلر موظف تصحیح کد های اشتباه ما نیست !!!!!!!!!

Will_Smith
پنج شنبه 05 مهر 1386, 13:42 عصر
مثلا ؟؟؟؟؟؟ کامپایلر موظف تصحیح کد های اشتباه ما نیست !!!!!!!!!
مثلا AV
احتمالا میخای در مورد AV و اینکه چه موقع پیش میاد برام توضیح بدی
موارد بوده که من با دلفی 7 این اشکال رو داشتم ولی وقتی همون برنامه رو با ورژن 2006 کامپایل کردم مشکلی نبوده

vcldeveloper
پنج شنبه 05 مهر 1386, 16:02 عصر
موارد بوده که من با دلفی 7 این اشکال رو داشتم ولی وقتی همون برنامه رو با ورژن 2006 کامپایل کردم مشکلی نبوده
امکان داره باگی در Runtime دلفی وجود داشته که در نسخه های بعدی آن باگ برطرف شده.