المتابعون للمدونة

السبت، 24 يونيو 2017

32 بت أم 64 بت؟


س: كيف أعلم برمجيا إن كان نظام التشغيل الذي يعمل عليه برنامجي 32 بت أم 64 بت؟ 

ج: يمكن استخدام دوال API لاكتشاف ذلك، لكن هناك طريقة أبسط هي فحص الخاصية IntPtr.Size، فإن كانت قيمتها 4 فالنظام 32 بت، وإن كانت قيمتها 8 فالنظام 64 بت:

VB.NET

If IntPtr.Size = 4 Then
   ' 32 bit Windows
Else
   ' 64 bit Windows
End If
 

C#
if (IntPtr.Size == 4)
   // 32 bit Windows
else
   // 64 bit Windows
وإليكم التوضيح:
تعلمون أن 32 بت = 4 بايت
و أن 64 بت = 8 بايت
في نظام 32 بت يتم إنشاء عناوين للذاكرة طولها 32 بت (4 بايت).. هذا يفر في مساحة الذاكرة المستخدمة لحفظ عناوين الكائنات المخزنة في الذاكرة، لكنه على الناحية الأخرى يسمح فقط بالتعامل مع ذاكرة بأقصى سعة تخزين = 2 أس 32 بت وهو ما يساوي تقريبا 4 جيجا بايت.. لهذا لو شغلت نظان ويندوز 32 بت على جهاز يحتوي على ذاكرة سعتها 8 جيجا بايت مثلا، فلن يستطيع الويندوز التعامل إلا مع أول 4 جيجا بايت فقط من هذه الذاكرة (في الحقيقة سيتعامل مع 3.2 جيجا فقط والباقي سيحجزه لعناوين كارت الشاشة والأجهزة الأخرى)!
لهذا من المتوقع اختفاء ويندوز 32 بت مع انتهاء عمل آخر جهاز يعمل بذاكرة 4 جيجا أو أقل.
أما بالنسبة لنظام ويندوز 64 بت، فهو يستخدم عناوين ذاكرة طولها 8 بايت.. هذا يهدر مساحة أكبر لحفظ عناوين الكائنات، لكنه يسمح بالتعامل مع ذاكرة سعتها القصوى مهولة (حوالي 16 مليون تيرا بايت!!.. وأرجو ألا يفغر أحدكم فاه ويقول إن من المستحيل الوصول إلى ذاكرة بهذا الحجم.. فهذا نفس ما كان يقال عن الذاكرة التي سعتها 4 جيجا من 20 عاما :).. أول ذاكرة اشتريتها عام 2000 كانت سعتها 16 ميجا بايت!! )
وبالنسبة للفئة IntPtr فهي تمثل مؤشرا Pointer يحمل عنوان أحد الكائنات في الذاكرة.. طبيعي إذن أن سعتها ستكون 4 بايت على ويندوز 32 ، و 8 بايت على ويندوز 64 بت.

ليست هناك تعليقات:

إرسال تعليق

ملحوظة: يمكن لأعضاء المدونة فقط إرسال تعليق.

صفحة الشاعر