یه برنامه نوشتم که مشتری از اون در یک کامپیوتر 64 بیتی استفاده میکنه آیا نسخه 64بیتی براش درست کنم یا 32بیتی یا نه همون AnyCPU?
اصولا چه فرقی بین این نوع کامپایلها وجود داره مزیتها و اشکالاتشون چیه؟
یه برنامه نوشتم که مشتری از اون در یک کامپیوتر 64 بیتی استفاده میکنه آیا نسخه 64بیتی براش درست کنم یا 32بیتی یا نه همون AnyCPU?
اصولا چه فرقی بین این نوع کامپایلها وجود داره مزیتها و اشکالاتشون چیه؟
اصولا برنامه های 32 بیتی روی 64 بیتی کار میکنند.
(من خودم رو ویندوز 64 بیت ویستا تست کردم).
اگر برنامه 32 بیت باشد یه Program File X86 درست میکند و برنامه آنجا نصب میشود.
ولی فکر میکنم برنامه AnyCpu بود.
چون من یه برنامه CloneCD داشتم که 32 بیت بود ولی روی 64 اجرا نمیشد.
چه فرقی بین این نوع کامپایلها وجود داره مزیتها و اشکالاتشون چیه؟
آیا اگه با 64 بیتی کامپایل کنم سرعت برنامه روی سیستم 64بیتی بالا میره یا فرقی نداره؟ اگه فرقی نداره پس چرا کامپایل 64 بیتی رو ساختن؟
منظور از 64 بیت X64 و 32 بیت X86 نوع CPU هست نه سیستم عامل.
مثلا وقتی شما Windows Vista یا Server و یا حتی در بین Linux ها نسخه 64 بیتی آن را روی یک CPU 64 بیتی مثلا Xeon اجرا میکنید واقعا تفاوت را احساس میکنید.
منظور از 64 یا 32 بیت بودن CPU در ثباتها خلاصه میشه که شما در برنامه های در سطح دات نت هیچ وقت باهاشون در گیر نمیشید.
موفق باشید
اگه CPU کامپیوتر اجرا کننده برنامه 64 بیتی باشه ولی سیستم عامل نصب شده 32 باشد ، عملا شما از 32 بیت ثبات های CPU استفاده نکرده اید و امکان اجرا کردن برنامه های 64 رو ندارید چون برنامه ها توسط سیستم عامل مدیریت میشوند
تعداد بیت ها در CPU و در برنامه ها و سیستم عمال ها باعث افزایش سرعت نخواهد شد بلکه باعث افزایش قدرت خواهد شد
این امر بخاطر پشتیبانی و استفاده از Smart cach و cach L3 بوده والا 64 بیت ویا 32 بیت در سرعت نقشی ایفا نمیکنندمثلا وقتی شما Windows Vista یا Server و یا حتی در بین Linux ها نسخه 64 بیتی آن را روی یک CPU 64 بیتی مثلا Xeon اجرا میکنید واقعا تفاوت را احساس میکنید.
!!!!؟؟؟؟!!!!والا 64 بیت ویا 32 بیت در سرعت نقشی ایفا نمیکنند
پس میشه بگید چه نقشی ایفا میکند؟
خودتون میگید ثبات های CPU دارای 64 بیت هستند به جای 32 بیت. حالا فرض کنید در یک سیستم با معماری 32 بیتی لازم باشه که CPU داده ای 128 بیتی رو پردازش کنه در ثبات هاش، راهی نداره جز اینکه این 128 بیت رو به بخش های 32 بیتی تقسیم کنه و هر بار یک بخش رو پردازش کنه. بنا براین باید 4 بار داده بین ثبات ها جابجا شود.
اما در سیستم 64 بیتی تنها 2 بار نیاز به این جابجایی خواهد بود.
به نظر شما کدوم سیستم سریعتر خواهد بود؟
قفل مخفی تلگرام، واتس اپ و همه برنامه ها - قفل حرفه ای برای دستگاه اندرویدی شما - با امکان مخفی شدن و جلوگیری از Unisntall شدن
--آموزش ایجاد برنامه های چند زبانه در WPF
-BeRMOoDA File Encrypter-open source-using WPF, C# and MVVM Pattern
-نمونه برنامه ساده و کامل با الگوی MVVM برای کار با دیتابیس با استفاده از Entity Framework در WPF
-WPFMessageBox فارسی/انگلیسی - با قابلیت تغییر Skin
تا حالا به قضیه این طوری نگاه نکرده بودراهی نداره جز اینکه این 128 بیت رو به بخش های 32 بیتی تقسیم کنه و هر بار یک بخش رو پردازش کنه. بنا براین باید 4 بار داده بین ثبات ها جابجا شود.
اما در سیستم 64 بیتی تنها 2 بار نیاز به این جابجایی خواهد بود.
ولی توی درس معماری کامپیوتر یک بار بحث این قضیه تعداد بیت ها مطرح شد . و مزایای تعداد بیت بیشتر مورد بررسی قرار گرفت اکثر موارد حول محور های زیر چرخید
1- یکی از علت های محدود بودن حجم حافظه اصلی عدم آدرس پذیر بودن آفست و سگمت بزرگ از طرف ثبات ها cpu است => اگر مقدار بیت های ثبات ها افزایش یابد مقدار حافظه قابل آدرس دهی بیشتر میشود
2- جلوگیری از overfolw زود هنگام مثلا" دو عدد بزرگ integer رو که باهم جمع کنیم و نتیجه حاصله خارج محدوده integer شود ولی در صورتی که تعداد بیت ها افزایش یابد از overfolw زود هنگام جلوگیری به عمل می آید و ...
ولی فکر کنم با صحبتی که شما مطرح کردید بشه نتیجه گرفت تعداد بیت ها باعث افزایش سرعت نیز می شود
من سخنان ایشون رو تایید میکنم.
شما توی ویندوز بین 32 و 64 بیت عملا هیچ تفاوتی نمیبینید(البته cpu intel).
من 3d max کار میکردم.
توی ویندوز 32 یه مدل رو رندر گرفتم و توی ویندوز 64 هم رندر کرفتم ولی در مدت زمان هیچ فرقی با هم نکردند.
چندتا از دوستان من هم کار میکنند و همین موضوع رو تست کردند و این حرف رو تایید میکنند.
مخلص کلوم: ما فرق چندانی بین 32(x86) و 64(x64) ندیدیم.
مطالب بالا تا حد و قابل قبولی در مورد داخل Cpu درست هست ولی از اینکه میگویید در سرعت تاثیر ندارد اشتباه است .
اصولا وقتی cpu از یک دامنه مثلا 32 به دامنه بالاتر 64 صعود میکند به این خاطر نیست که فقط بتواند بازه رجیسترها را افزایش دهد بکله مقصود و هدف اصلی ارائه سرعت بیشتر به اجرای کدهای cpu است. که این هم به پهنای باند گذرگاه داده و آدرس بستگی دارد شما در نظر بگیرید که داده های شما با پهنای 32 وارد cpu و خارج بشوند چه فرقی با این دارد که با دوبرابر اینها یعنی 64 بیت وارد و خارج شوند پس مطمئنا عامل پیشرفت cpu به خاطر سرعت آن است.
شما برای تست کردن cpu نمیتوانید اجرای برنامه ها را مد نظر بگیرید مخصوصا کار گرافیکی که تقریبا به ram موجود در کارت گرافیکی شما بستگی دارد.
شما باید برای این نوع کار های از برنامه های هوش مصنوعی و برنامه های پیچیده مانند شبکه های عصبی و سایر برنامه ها که به سرعت بالا نیاز دارند استفاده کنید. برنامه های بالا یی که شما بهشان اشاره کردید تقریبا هیچ فشاری به cpu وارد نمیکنند.
فرض مسئله :اگه cpu ، ثبات های 64 بیتی داشته باشه و سیستم عمال هم 64 بیت باشه ولی فایلی اجرایی برای سیستم های 32 بیتی نوشته شده باشه !فکر نمی کنم توی سرعت تفاوتی بوجود بیاد!من 3d max کار میکردم.
توی ویندوز 32 یه مدل رو رندر گرفتم و توی ویندوز 64 هم رندر کرفتم ولی در مدت زمان هیچ فرقی با هم نکردند.
نتیجه گیری جدید که من کردم : اگه سیستم عامل 64 بیتی رو روی سخت افزار 32 بیت اجرا کنیم باعث افت سرعت میشه. پس در هیچ حالتی افزایش سرعت نداریم ولی اگه config درستی نداشته باشیم باعث افت سرعت خواهد شد.
در کل تعداد بیت ها فقط در افزایش قدرت تاثیر داره! اگه کسی مخالفه این نتیجه گیریه با یک مثالی ملموس ادله بیاره
پارامتر های مهم در افزایش سرعت FSB , BSB , Cach در سی پی یو
با تشکر/
دوستان اگه لطف کنن بحث رو روی انواع کامپایل از نظر 64 بیتی 32 بیتی ایتانیوم و AnyCpu در VS.net متمرکز کنن.
کامپایل پروژه به صورت 64 بیتی فکر نکنم فقط این مزیت رو نسبت به کامپایل AnyCpu داشته باشه که دیگه برنامه با cpuهای 32 بیت کار نکنه. احتمالا مزیت های دیگه ای هم داره اگه کسی میدونه منتظریم
ممنون
نوع داده int : به اندازه ثبات های CPU و نوع سیستم عامل بستگی داره
یعنی توی کامپوتر های 8086 8088 مقدار فضای اشغالی نوع داده int در RAM یک بایت بود ( چون ثبات ها 1 بایت بودن )
در کامپوتر های 80186 80286 80386 مقدار فضایی که نوع داده int اشغال میکرد دو بایت بود
در کامپیوتر های 80486 80586(Pentium) تا کامپیوتر های X86 ، مقدار فضایی که نوع داده int در RAM اشغال می کki چهار بایت است (32=4*8)
و در سیستم های 64 بیتی مقدار فضایی که اشغال میکنه 8 بایت خواهد بود
_____________________
حالا وقتی دامنه متغییر های int افزایش پیدا کنه قدرت محاسبه برای اعداد بزرگتر محیا میگردد
این تفاوت در پیچیدگی داده ها در سطوح پایین پروسس قابل درک هست.
مثلا در assembly ثباتی داریم به نام ax که 32 بیتی هست یعنی در CPU های 32 بیتی کار خودش رو درست انجام میده همچنین میتونه در CPU های 64 بیتی هم کار کنه ولی وقتی یک برنامه 32 بیتی را روی یک CPU 64 بیتی اجرا میکنید توقع بیجا برای احساس تغییر نداشته باشید. چون ثبات همون ثباتهای 32 بیتی هستن.
در ثباتهای 32 بیتی شما به عدد 0xFFFFFFFF که معادل 4،294،967،295 هست محدود هستید به این معنی که پردازش های بزرگتر از این عدد برای شما در شرایط عادی مقدور نیست.
ولی در CPU های 64 بیتی علاوه بر ثبات های 32 بیتی ax,bx,cx, ... نوع 64 بیتی این ثباتها هم وجود داره که eax,ebx,ecx, ... نام گزاری شده پس در این شرایط بازه پردازش عددی ما به 0xFFFFFFFFFFFFFFFF که معادل 18،446،744،073،709،551،615 ارتقا خواهد یافت. پس در چنین شرایطی اگر در برنامه ای از یکی از ثباتهای 64 بیتی استفاده شده باشه اون برنامه هیچ وقت برای یک CPU 32 بیتی قابل درک نخواهد بود پس اجرا هم نخواهد شد و عکس این مسئله هم صدق میکنه به این معنی که اگر شما در برنامه ای که به صورت 64 بیتی کامپایل شده ولی از ثباتها 64 بیتی در اون استفاده نشده مشکلی بر روی پردازنده های 32 بیتی پیدا نخواهید کرد.
هچنین پردازش گر های 64 بیتی در شرایط خاص و پیچیده بازدهی و سرعت خود را نشان خواهند داد نه شرایط عادی و خانگی.
-----------------------
alireza_tavakol@
در جمله بالا بحثی درباره سرعت نشده گفته شده تفاوت را احساس میکنید و بنا به توضیحات پیشین این تفاوت در بر نامه های پیچیده که سرورکار با ارقام بزرگی دارند قابل درک است.مثلا وقتی شما Windows Vista یا Server و یا حتی در بین Linux ها نسخه 64 بیتی آن را روی یک CPU 64 بیتی مثلا Xeon اجرا میکنید واقعا تفاوت را احساس میکنید.
همچنین اگر با یک نگاه غیر فنی و عامیانه به تفاوت بین 32 بیتی یا 64 بیتی بودن پردازنده بنگریم به این نتیجه خواهیم رسید که هدف از ساخت پردازنده های 64 بیتی انجام محاسبات بسیار بزرگ در مدت زمان کمتری بوده ، یعنی سرعت + قدرت
بله ، با سطح دانش بنده سالیانه سال با ارقام 64 بیتی سرو کار پیدا نخواهم کرد.پس می فرمایید IDE VS محض الکی پنجره Configuration Manager یا مثلا" Properties>Builb>General>Platform target رو گذاشته ؟
منظور از درگیر شدن درگیری فیزیکی و زور آزمایی نیست ;)
منظور همون استفاده از نوع ثبات حافظه هست که شما هیچ وقت با زمان استفاده از ax یا eax درگیر نمیشی. ولی در زبانی مثل assembly طرز استفاده از این ثباتها بسیار مهم و حیاتی هستند.
--------------------------------
پ.و : یاد بگیریم بجای نقض کردن خام و غیر فنی، با اصول و توضیحات کامل یک مسئله را نقض کنیم چون همین نقض کردن با اصول علم دیگران باعث پیشرفت جوامع بشری شده و خواهد شد.
موفق باشید
مثال برنامه ای همان محاسبات ژنتیک و یا ترکیبات اتمی و غیره همه این دلایل فقط ذکر یادآوریست.
ببینید اصلا بحث سرعت cpu به رجیستر نیست بلکه رجیستر جزو امکانات cpu و انقدر که شما اذعان میکنید رو سرعت تاثیر ندارد بلکه طول bus یا همان گذرگاه است که سرعت را بالا میبره.
ولی نمیدان این همه مطالب را برای بیان 64و 32 بیتی بودن را ارائه میدهد اصلا سیستم عامل 64 بیتی قادر به اجرا با مادر بورد و cpu با طول گذرگاه 32 بیتی نیست. بلکه باید از فرایند اجرای خودش به سیستم عامل 32 نزول دهد(البته هنگام نصب) که باز همان سیستم عامل 32 بیتی خواهد بود و دارای همان سرعت هم هست میتوانید vista را آزمایش کنید.