برنامه های 64 بیتی؟؟

bitaroos

Member
سلام دوستان

چند روزه یه سوال برام پیش اومده
cpu کامپیوتر من 32 بیتی هست. آیا برنامه هایی که با c#.net مینویسم، روی کامپیوتر های 64 بیتی جواب میده؟
و آیا میشه با این سیستمی که دارم(32 بیتی)، برنامه ای بنویسم که فقط و فقط روی کامپیوتر های 64 بیتی اجرا بشه؟

اینم بگم که cpu کامپیوترم 32 بیتی هست ولی گفته که ویندوز 64 بیتی رو هم ساپرت میکنه

با تشکر
 

ARAsoftware

Member
32 یا 64 بیتی بودن cpu بستگی به ظرفیت ثبات ( register ) های داخل CPU داره، پس در نتیجه cpu های 64بیتی دارای رجیستر های با ظرفیت 64بیت هستند و میتونن دستوراتی با این تعداد بیت رو در خودشون جای بدن
به این ترتیب، برنامه 32 بیتی روی پردازنده 64بیت اجرا میشه ولی برعکسش امکان پذیر نیست چونکه طول دستورات، در داخل رجیستر های این cpu جا نمیشه و overflow رخ میده

طبق همه این توضیحات، چیزی کخ شما در مورد CPU خودت گفتی، یه ذره غیر منطقی به نظر میرسه
 

bitaroos

Member
آره خودمم نمیدونم چرا cpu م اینجوریه!!
از cpu م بگذریم، پس چرا بعضی برنامه های 32 بیتی روی ویندوز های 64 بیتی اجرا نمیشه؟

یه سوال دیگه: طبق این توضیح شما، وقتی توی C# متغیری از نوع int64 تعریف میکنیم، cpu 32bit چه جوری
میتونه پردازشش کنه و اور فلو نمی کنه؟ البته شاید اورفلو هم بکنه نمی دونم والا
 

ARAsoftware

Member
به این مساله 2جور میشه نگاه کرد
یکی اینکه کامپایلر میاد و اون متغییر رو در موقعی که حجمش از 32بیت بیشتر باشه بشکنه و به دو قسمت تبدیلش کنه ( مثل کاری که به صورت دستی در برنامه نویسی اسمبلی انجام میشه ) و حالت دوم اینکه احتمال اینکه اون عدد از رنج 32بیت خارج بشه کمه، درسته که فضای مورد نظر رو در اختیارت میذاره ولی شاید از فضای کمی از اون استفاده کنی
64بیتی بودن بیشتر موقعی به چشم میاد که CPU میخواد عمل fetch ( آوردن دستورات از رم به CPU ) رو انجام بده که بوسیله باس 64بیتی در هر نوبت دو برابر 32بیتی ها اطلاعات برای پردازش وارد cpu میشه
 

the_king

مدیرکل انجمن
سلام دوستان

چند روزه یه سوال برام پیش اومده
cpu کامپیوتر من 32 بیتی هست. آیا برنامه هایی که با c#.net مینویسم، روی کامپیوتر های 64 بیتی جواب میده؟
و آیا میشه با این سیستمی که دارم(32 بیتی)، برنامه ای بنویسم که فقط و فقط روی کامپیوتر های 64 بیتی اجرا بشه؟

اینم بگم که cpu کامپیوترم 32 بیتی هست ولی گفته که ویندوز 64 بیتی رو هم ساپرت میکنه

با تشکر

آره خودمم نمیدونم چرا cpu م اینجوریه!!
از cpu م بگذریم، پس چرا بعضی برنامه های 32 بیتی روی ویندوز های 64 بیتی اجرا نمیشه؟

یه سوال دیگه: طبق این توضیح شما، وقتی توی C# متغیری از نوع int64 تعریف میکنیم، cpu 32bit چه جوری
میتونه پردازشش کنه و اور فلو نمی کنه؟ البته شاید اورفلو هم بکنه نمی دونم والا

بجز موارد خیلی نادر کلا برنامه هایی که با کامپایلر های 32 بیتی ایجاد می شوند در محیط سیستم عامل 64 بیتی
قابل اجرا شدن هستند، از تمامی قدرت پردازنده 64 بیتی و تمامی حافظه RAM موجود استفاده نمی کنند
اما به هر حال اجرا می شوند.

برنامه هایی که به زبان هایی مثل C یا اسمبلی می نویسیم معمولا با کامپایلر به کد ماشین تبدیل می شوند
که مستقیما توسط پردازنده 32 یا 64 بیتی اجرا می شود. اگر در این کد ماشین از دستورات یا رجیستر هایی
استفاده شود که آن پردازنده پشتیبانی نکند اجرا برنامه مختل می شود.

اما زبان های تحت Net. مثل #C خودشان یک زبان میانی دارند و موقع کامپایل شدن به اون زبان میانی تبدیل می شوند،
نه کد ماشین 32 یا 64 بیتی. برای اجرا شدن این زبان میانی Net Framework. ماشین مجازی خاص خودش را دارد
که با قابلیت های پردازنده های متفاوتی آشنا است. به کمک این ماشین مجازی کد های زبان میانی روی هر
پردازنده ای متناسب با قابلیت های آن زبان اجرا می شود، مثلا اگر پردازنده 64 بیتی است از قابلیت های 64 بیتی اش
استفاده می کند و اگر 32 بیتی است، فرضا متغیر های 64 بیتی را با الگوریتم های مخصوص خودش
شبیه سازی می کند، طوری که از دید برنامه شما فرقی نمی کند که پردازنده چند بیتی است.
 

جدیدترین ارسال ها

بالا