سؤال

أنا أبحث عن إشارة على الاختلافات بين نماذج الذاكرة المستخدمة من قبل .NET CLR/جيت على x86/x64/ia64.أنا أعلم أن هناك بعض الاختلافات بين x86 و ia64 (تعليمات إعادة ترتيب ، تعليمات إزالة ، الخ) ، ولكن لم أجد إشارة على الاختلافات بين x86 و x64.

لدي أحد التطبيقات التي تهدف لبعض ضيق جدا الكمون الأرقام ، وسوف تعمل فقط على x86 في هذا الوقت ، وربما على x64 (بالتأكيد ليس على ia64).أنا أتساءل عما اذا كان يمكن الاعتماد على بعض القطع الأثرية من x86 JIT التنفيذ ولا تزال تكون آمنة نسبيا على x64, أو إذا كان ينبغي أن تكون البرامج أكثر مرونة ia64 جيت (والتي سوف تتطلب المزيد من الحقول تكون volitile والذاكرة الحواجز تدرج في عدة أماكن).

شكرا مقدما على أي مؤشرات.

هل كانت مفيدة؟

المحلول

مقالتان على طراز ذاكرة .NET (وهو أقوى من نموذج ECMA، BTW):

كتاب جو دوفي، البرمجة المتزامنة على ويندوز, ، هو أيضا مصدر كبير للمعلومات حول هذا الموضوع.

نصائح أخرى

يتم تحديد نموذج الذاكرة .NET في مواصفات ECMA ISO / IEC-23271. على وجه التحديد في التقسيم الأول: المفاهيم والهندسة المعمارية، الفصل 12.6 "نموذج الذاكرة والتحسينات".

يحدد هذه المعيار الحدود قد تعمل JIT. إذا كنت تريد أن تكون محايدا للهندسة المعمارية، فيجب عليك اتباع هذا المعيار وليس الاستفادة من أي تفاصيل ل X86 / X64 Jits.

بالإضافة إلى X64 عبارة عن تطور إلى X86، فإنه يتكون في الغالب من التعليمات الإضافية والسجلات وبعض الإضافات (SSE2) يتم تعريفها على أنها خط الأساس لجميع المعالجات المتوافقة مع جميع x64. لم يكن هناك تغيير تقريبا في نماذج الذاكرة، باستثناء مساحة العنوان الإضافية وسائط معالجة إضافية (الوصول إلى بيانات مؤشر التعليمات النسبية)، لذلك يجب تحسين جيت X86 جيب نتائج جيدة على x64 أيضا.

هذه قد تكون بعيدة مستوى منخفض جدا لك ولكن بعض كبار السن AMD 64 بت وحدة المعالجة المركزية لا تملك CMPXCHG16B (المصدر) إذا كنت تعتمد على الأجهزة غير مؤمن التعليمات.

كما يبدو أن هناك التغييرات في نموذج الذاكرة C++ التي قد تكون ذات صلة لذلك قد تضطر إلى ترقب إذا كنت تفعل على مستوى منخفض جدا البرمجية.

نموذج الذاكرة 'المحدد' قبل CLR مستمر موضوع نقاش داخل Microsoft (نوقشت علنا على الأقل بقدر ما يعود إلى 2003).كملاحظة جانبية كريس Brumme الدول في هذا المقال أن نموذج x64 هو نفس x86 التي أود أن نفترض هو بيان دقيق لأغراض CLR استضافت رمز.

إلا إذا الهدف الخاص بك المستخدمين صراحة Itanium أعتقد أن ببساطة بما في ذلك تراجع أبطأ ولكن بسيطة وآمنة ، تنفيذ تلك العمارة ستكون كافية على صحتها.ثم ان هناك حاجة للإشارة إلى أن البرنامج هو كسر على منصة, فقط أنه يعمل في أبطأ وضع الاحتياطي.إذا كان الناس في وقت لاحق ترغب في استخدام منصة على محمل الجد يمكنك رمز إلى أن كثيرا مرونة نموذج.

علما بأن x64 JIT مختلفة إلى x86 جيت (بشكل كبير جدا منذ 3.5 SP1) لذلك أي وضع الإصدار اختبار واحد ليس ممثل الأخرى والعكس بالعكس.الاختبار حسب الاقتضاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top