مشاهده نسخه کامل
: دو سوال از قابلیت های c
bahareh655
12-09-2008, 18:43
سلام
از قابلیت c میخواستم بدونم:
1-برنامه ای در مورداینکه ram از فضای هارد برای خودش استفاده کنه.
2-چطور میشه دو بایت اطلاعات را در یک بایت جاسازی کرد
باتشکر
hamidreza_buddy
12-09-2008, 23:12
خیلی خوب متوجه سئوال اولت نشدم. یعنی اینکه برنامه بنویسی که این کار رو بکنه؟
سیستم عامل ها این کار رو انجام می دهند که به اون اصطلاحاً Virtual Memory گفته می شود و الگوریتمش اینجوریه که بعد از یه مدتی برنامه ای که با هاش کار می کنی رو می ریزه رو هارد تا جا واسۀ برنامه های دیگه باز بشه و در مواقع نیاز اونو از هارد می ریزه تو ram و برنامه رو اجرا می کنه.
اگه دقت کرده باشی وقتی خیلی برنامه بازه و بعد یه مدتی مثلاً از word استفاده نمی کنی و بعد می خوای بری توش صدای هارد در میاد (چراغش روشن میشه) و از هارد استفاده می کنه. این به همون دلیله که حافظۀ برنامۀ word رو ریخته تو هارد و برای اجرا باید بازیابیش کنه و در نتیجه چون سرعت هارد پایینه این کار یع کم طول میکشه و چراغ هارد هم روشن میشه (در حال خواندن از فایل)
hamidreza_buddy
12-09-2008, 23:26
برای همۀ جایگشت های 0 و 1 بایت ها امکان نداره. یعنی برای همۀ ترکیب های «دلخواه» 0 و 1.
ولی شاید این سئوال براتون پیش بیاد که پس برنامه های فشرده سازی چگونه کار می کنند.
الگوریتم های فشرده سازی معمولاً (معمولاً) به دنبال یک کاراکترهای خاصی می گردند که زیاد تکرار شده باشند و بعد اون ها رو به کد کوچکتری جایگزین می کنند. ولی این معمولاً توی اطلاعات متنی و تصویری فشرده نشده کاربرد داره.
ولی فایل به یه جایی می رسه که با یه الگوریتم مشخص امکان فشرده سازیش وجود ندارد (اگه داشت که می شد حجم یه فایل رو 1 بیت کرد!!!). مثلاً اگه یه فایل rar رو دوباره فشرده سازی کنید می بینید که حجمش کم نمیشه (اگه زیاد نشه!)
واسه همینه که میگم «دلخواه». چون ممکنه یه فایل 1 مگابایتی رو بشه بکنی 100k (اگه فشرده نشده باشه قبلاً) ولی مثلاً اگه یه فایل 1 مگابایتی فشرده شده (مثلاً یه تصویر jpeg) رو فشرده کنیم، حجم فایل نتیجه ممکنه بیشتر هم بشه.
یعنی دو تا فایل 1 مگابایتی یکی یشه 100k و دیگری همون می مونه. یعنی واسه هر الگوریتم، فایلی وجود داره که نتونه فشرده کنه اون رو.
مثال شما هم همینه.
اگه مثلاً بایت های شما 00000000 و 11111111 باشند (مثلاً) میشه اونارو به صورت 00001111 در یک بایت جا داد!
ولی اگه 01110100 و 11100011 باشن نمیشه این کارو کرد.
پس می بینیم که نمیشه به صورت «قطعی» فشرده سازی lossless (بدون از دست دادن داده ها) انجام داد که منجر به کاهش حجم فایل شود.
البته فشرده سازی lossy هم وجود داره که توش اطلاعات از دست می ره (مثل تبدیل bmp به jpeg که کیفیت عکس پایین می یاد)
مثلاً 00000001 و 11111111 رو به 00001111 تبدیل کنیم (مثلاً!!).
در این صورت می بینیم کهدر صورت دیکد این مقدار 00000000 و 11111111 رو به دست می آوریم که در نتیجه یک 1 از بایت اول از دست رفته است.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.