معالجة الاستثناء نماذج من دول مجلس التعاون الخليجي

StackOverflow https://stackoverflow.com/questions/318383

  •  11-07-2019
  •  | 
  •  

سؤال

مجلس التعاون الخليجي يدعم Setjump-longjump (sjlj) و Dwarf2 على أساس جدول الفك (dw2) استثناء التعامل مع النماذج.ما هو الفرق بين اثنين من النماذج وكيفية اختيار النموذج المناسب?لماذا Dwarf2 على أساس جدول الفك (dw2) أكثر كفاءة النموذج ؟ أنا أفهم أن اثنين من نماذج لا يمكن أن تكون مختلطة.

المرجع: معاينة تقنية:دول مجلس التعاون الخليجي-4.2.1-sjlj -2

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

المحلول

حسنا, dwarf2 يبني الجداول لكل وظيفة, التي تحتوي على ما المستدعى حفظ السجلات و أين في المكدس يتم حفظها ، حيث مؤشر الإطار/عنوان العودة في مكدس الاستدعاءات و بعض الأشياء الأخرى.إذا كنت تستخدم dwarf2, مترجم يمكن استخدام هذه المعلومات على نحو فعال استعادة سجلات القفز مرة أخرى إلى المتصلين في حالة استثناء.على الخلفيات تحتاج إلى توفير المعلومات في تطبيقات' مقدمة توليد رمز أقول دول مجلس التعاون الخليجي التي يسجل فيها هي المستدعى-حفظه, و عندما مؤشر الإطار تم حفظ هذه الاشياء.

باستخدام setjmp/longjmp هو مجرد الإختراق.منذ setjmp/longjmp لا يعرف عن هيكل وظيفة رمي ، فإنه سيتم استعادة كافة السجلات المحفوظة في القفز العازلة من قبل setjmp ، حتى لو كانوا لا يتم تجاوز رمي وظيفة.أنا لست خبير في هذا, ولكن أعتقد أنه من الواضح أن هذا لن تكون فعالة.أيضا ، في كل مرة تبدأ كتلة المحاولة ، setjmp يجب أن يكون دعا إلى اقامة المنطقة العازلة التي تتضمن حفظ السجلات ، بينما عند استخدام dwarf2, مترجم بالفعل يوفر جميع المعلومات اللازمة في وقت الترجمة.

إذا كان الخلفيات لا توفر المعلومات اللازمة دول مجلس التعاون الخليجي سوف تسقط تلقائيا-إلى setjmp/longjmp على أساس معالجة الاستثناء.

ملاحظة أنا لست دول مجلس التعاون الخليجي الخبراء.لقد استدار toolchain إلى بعض من السهل المعالج من أستاذي ، بما في ذلك دول مجلس التعاون الخليجي.آمل أن أتمكن من مساعدتك قليلا.

نصائح أخرى

تجنب sjlj.كل "محاولة" كتلة الدعوة التي setjmp يحفظ سجلات الأداء ضرب حتى عندما لا استثناءات تثار.باستخدام جداول التدفق الطبيعي التحكم يتحمل أية تكلفة التنفيذ.فقط عندما يتم رفع استثناء هل التعامل مع استثناء آلية يجب أن تذلل من خلال الجداول إلى معرفة ما يجب القيام به.

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