PDA

View Full Version : ذخیره آرایه سه بعدی و کمبود حافظه!!



shahram_c1
یک شنبه 14 خرداد 1391, 23:43 عصر
با سلام و خسته نباشید خدمت دوستان عزیز ؛

در صورت کمبود فضای مورد نیاز برای تعریف آرایه 3بعدی با ابعاد 1000*1000*1000 از نوع int بر روی RAM ، چه راه حلی پیشنهاد می دهید؟ ( زبان = #C )

shahram_c1
یک شنبه 21 خرداد 1391, 00:12 صبح
منتظر پاسخ دوستان . . .

FastCode
یک شنبه 21 خرداد 1391, 00:20 صبح
چه اطلاعاتی داخل آرایه دارید؟

Hossenbor
یک شنبه 21 خرداد 1391, 09:56 صبح
دوستان کسی هست راهنمایی کنه در این مورد یا اگر مقاله ای در مورد مدیریت منابع داره اینجا بذاره؟ اگر در مورد سی پلاس پلاس هم باشه که بهتر با تشکر

shahram_c1
دوشنبه 29 خرداد 1391, 10:55 صبح
چه اطلاعاتی داخل آرایه دارید؟

عناصر آرایه با مقادیر اعداد صحیح پر می شن ... int

Saeed_m_Farid
سه شنبه 30 خرداد 1391, 01:48 صبح
عناصر آرایه با مقادیر اعداد صحیح پر می شن ... int
بلی، اون رو که تو پست اول گفتین! منظور اینه که چه خبره آرایه سه بعدی 1000*1000*1000؟ معمولاً گرفتن اینهمه فضا (32 بیت (http://msdn.microsoft.com/en-us/library/5kzh1b5w%28v=vs.80%29.aspx) ضربدر 9^10 میشه 4 گیگ فضا!!!) نشون میده که شما راه درستی انتخاب نکردین! اطلاعات نجومی هم بخواین ذخیره کنید میشه با راه های بهینه تری مثل لیست های جنریک یا مثلاً آرایه ای از کلاس ها و Dictionary و ... خیلی بهتر به نتیجه رسید؛ پس سوال شما باید با این سوال پاسخ داده بشه که برای چه کاری این آرایه سه بعدی عظیم رو لازم دارین، اونهم با مقادیر مشخص اولیه برای ایندکس؟

http://www.dotnetperls.com/cube-2.png

barnamenevisforme
سه شنبه 30 خرداد 1391, 06:49 صبح
سلام
به فرض اینکه استفاده از همچین آرایه ای منطقی باشه مگه شما در این زمینه به مشکلی برخوردید؟
به نظر شما همه متغیر هایی که در برنامه تعریف میشن از حافظه ram استفاده میکنند؟(اینو خودمم نمیدونم.)
ولی تا جایی که میدونم برنامه های سنگین مثل برنامه های گرافیکی موقعی که حجم زیادی از حافظه رو نیاز دارن فضایی روی hard به خودشون اختصاص میدن که اگه اشتباه نکنم virtual memory paging file نام داره و قابل گسترش هم از طریق خود windows (اگه در تنظیم ها فعال باشه) و هم از طریق کاربر هست.
اینکه آیا این گفته بنده جواب سوال شما باشه یا خیر اساتید میدونند.

Saeed_m_Farid
سه شنبه 30 خرداد 1391, 11:18 صبح
اولاً به احتمال زیاد این دوستمون همینطوری یه سوالی به ذهنش رسیده مطرح کرده، ولی در کاربردهای واقعی اصلاً مهم نیست که سیستم عامل چه جوری این فضا رو برای برنامه ها تامین میکنه؛ در 99.9999% موارد، رویکردی که باعث بوجود اومدن چنین نیاز عظیمی برای یک متغیر میشه معمولاً غلط هست و باید توش تجدیدنظر بشه. (حتی اگه قرار باشه ارقام اختلاس هم نگهداری کنید :دی)

از طرف دیگه از وقتی دات نت بوجود اومد! شما یک محدودیت 2GiB (اسمی) برای هر آبجکت منفرد داشتین و این قصیه تا الان که CLR 4.0 اومده پابرجا هست، فرقی هم نمیکنه که برنامه 32 بیتی باشه یا 64 بیت و ...، ولی واقعیت اینه که فضایی که CLR حتی برای لیستهای جنریک و ... محدود میکنه معمولاً کمتر از این مقدار اسمی هم هست و چون کدها Managed هستند، مدیریت منابع CLR، مانع انجام این کار توسط شما میشه. این مقدار تجربی یه چیزی بین 1.2 گیگ الی 1.4 گیگ هست (استثناء (http://msdn.microsoft.com/en-us/library/hh285054%28v=vs.110%29.aspx)) ...
چون دیگه بقیه اش خیلی وارد مباحث تئوری میشه و الکی برای شما سردرد میاره، ادامه نمیدم! برای اطلاعات بیشتر می تونید به لینک هایی که تو پست دوم به بعد موضوع پایین اومده دقت کنید:
? (http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0) Single objects still limited to 2 GB in size in CLR 4.0 (http://stackoverflow.com/questions/1087982/single-objects-still-limited-to-2-gb-in-size-in-clr-4-0)