PDA

View Full Version : سوال: چند سوال در مورد متغیر و حافظه



Saeed113
یک شنبه 30 آبان 1389, 21:37 عصر
سلام
خسته نباشید
چندتا سوال داشتم . ممنون می شم اگه جواب بدید.
زماني که ما يک يک متغير را براي دريافت يک ورودي تعريف مي کنيم آيا متغير اطلاعات خود را درون حافظه ram ذخيره يا هارد؟
آيا مقدار int در همه زبانهاي برنامه نويسي برابر 16 يا 32 بيت است ؟ يعني مقدار يک داده يک مقدار قرار دادي است؟
توجه: در اينجا ظرفيت حافظه RAM برابر 16 مگابايت است.
فرض کنيد که ما بتوانيم يک متغير را تعريف کنيم که بتواند بيش از ظرفيت RAM ورودي دريافت کند ( يعني بيش از 16 مگابايت ) در اين صورت اطلاعات اضافي را که از ورودي دريافت شده اند در کجا ذخيره مي شوند؟ آيا RAM آسيب نمي بيند؟ آيا اصطلاح و يا کلمه براي چنين حالتي وجود دارد؟ اصلا چنين کاري ممکن است؟

Delphi Coder
دوشنبه 01 آذر 1389, 18:00 عصر
زماني که ما يک يک متغير را براي دريافت يک ورودي تعريف مي کنيم آيا متغير اطلاعات خود را درون حافظه ram ذخيره يا هارد؟
مسلما در RAM

آيا مقدار int در همه زبانهاي برنامه نويسي برابر 16 يا 32 بيت است ؟ يعني مقدار يک داده يک مقدار قرار دادي است؟
خیر هر زبانی type های خودش رو داره و برای اینکه بدونیم چند بیتی هست یا چقدر فضا میگیره باید به Reference همان زبان مراجعه کرد.

فرض کنيد که ما بتوانيم يک متغير را تعريف کنيم که بتواند بيش از ظرفيت RAM ورودي دريافت کند ( يعني بيش از 16 مگابايت ) در اين صورت اطلاعات اضافي را که از ورودي دريافت شده اند در کجا ذخيره مي شوند؟ آيا RAM آسيب نمي بيند؟ آيا اصطلاح و يا کلمه براي چنين حالتي وجود دارد؟ اصلا چنين کاري ممکن است؟

این بستگی به برنامه داره یا تیکه تیکه رو یه فایل save کنه یا اینکه اگر این کار رو نکنه overflow به وجود میاد. اصولا هم به RAM آسیبی نمیرسه.

tdkhakpur
دوشنبه 01 آذر 1389, 18:57 عصر
فرض کنيد که ما بتوانيم يک متغير را تعريف کنيم که بتواند بيش از ظرفيت RAM ورودي دريافت کند ( يعني بيش از 16 مگابايت ) در اين صورت اطلاعات اضافي را که از ورودي دريافت شده اند در کجا ذخيره مي شوند؟ آيا RAM آسيب نمي بيند؟ آيا اصطلاح و يا کلمه براي چنين حالتي وجود دارد؟ اصلا چنين کاري ممکن است؟

اساسا کامپایلر یا اسمبلر نباید اجازه رزرو فضای بیش از حد را به شما بدهد.
در ضمن برنامه هایی که که از قدرت overload استفاده میکنند با استفاده از تخصیص حافظه در فضای extended و یه سری کدهایی اضافی هم برای پیاده سازی این گونه اعمال بر روی هارد در صورت کمبود حافظه قرار میدهند که از چشم برنامه نویس که از این رابط استفاده میکنند پنهان میماند مانند ritchedit و ا word که چنین اعمالی رو انجام میدن ولی در اسمبلی در مد حقیقی چنین پشرفتی در حالت استفاده بصورت آماتور وجود ندارد.

Saeed113
دوشنبه 01 آذر 1389, 23:05 عصر
از پاسخ آقای/خانمDelphi Coder و سایر دوستان متشکرم .
ولی Delphi Coder منظور شما را در جمله زیر نمی فهمم:

این بستگی به برنامه داره یا تیکه تیکه رو یه فایل save کنه
از شما ممنون میشم اگه یحورده واضحتر توضیح بدین
با تشکر.

xman_1365_x
یک شنبه 07 آذر 1389, 17:22 عصر
فرض کنيد که ما بتوانيم يک متغير را تعريف کنيم که بتواند بيش از ظرفيت RAM ورودي دريافت کند ( يعني بيش از 16 مگابايت ) در اين صورت اطلاعات اضافي را که از ورودي دريافت شده اند در کجا ذخيره مي شوند؟ آيا RAM آسيب نمي بيند؟ آيا اصطلاح و يا کلمه براي چنين حالتي وجود دارد؟ اصلا چنين کاري ممکن است؟
وقتي محدوديت داريد نمي توانيد بيشتر از اون آدرس دهي كنيد بالا تر از 16 مگابايت فرضي شما اسمبلر نمي تونه تبديل كنه به معادل ماشين براي همين خطا ميده شما متوجه ميشي
با فرض اينكه كامپايلر اجازه بده شما تا 4 گيگابايت براي پردازنده هاي 32 بيتي آدرس دهي كني اما مقدار رم شما كمتر باشه سيستم كرش ميكنه
در مورد مد هاي پردازنده هم كه تفاوت هست با مد واقعي!