سؤال

هناك العديد من أدوات القياس الثابتة والديناميكية.Soot هي أداة أدوات ثابتة لـ Java bytecode.يعد Pin وValgrind من أدوات القياس الديناميكية للثنائيات.

ما هي إيجابيات وسلبيات أدوات الأجهزة الثابتة والديناميكية؟أعتقد أن أدوات القياس الثابتة أفضل من حيث الأداء في وقت التشغيل، في حين أن الأدوات الديناميكية أكثر قوة.يرجى مقارنتها من حيث القدرة والأداء.

بالإضافة إلى ذلك، ما الفرق بين استخدام أدوات القياس وكتابة تصريح LLVM؟

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

المحلول

أفترض أن الحاجة هي اكتشاف التعليمات البرمجية التي تأخذ وقتا كبيرا ويمكنك تحسينها لتوفير ذلك الوقت. هذا هو هدف مختلف من إجراءات توقيت فقط.

أنا متشكك في محلل ثابت لأن كل شيء يعتمد على مزيج بيانات الإدخال.

تحاول الأجهزة الديناميكية قياس خصائص الوظائف، مثل: الوقت الذاتي والوقت الإجمالي، المطلق، المتوسط، والنسبة المئوية. كما يطلق عدد، ودور كل روتين في الرسم البياني للمكالمات.

الأجهزة الديناميكية (A LA جبروف) كان المعيار الفعلي لعدة عقود، لكنه بعيد جدا عن كونه الكلمة الأخيرة. لشيء واحد، من المهم أن ندرك أن معظم الإحصاءات التي تمنحك أن تفتقد النقطة من حيث حاجتك الأصلية.

في هذه الأيام (IMHO) تحتاج إلى ملف تعريف أخذ العينات التي عينات مكدس المكالمات، وليس فقط عداد البرنامج. يجب أن تذوق على مدار الساعة الوقت، وليس فقط وقت المعالجة المركزية الوقت. لا تحتاج العينات إلى تردد عالية. يجب أن تقمع أخذ العينات عندما ينتظر التطبيق إدخال المستخدم. يجب أن يوفر لك معلومات في الخط أو مستوى التعليمات، وليس فقط مستوى الوظيفة. الإحصاء الأكثر أهمية يجب أن يمنحك خطا من التعليمات البرمجية هو النسبة المئوية للعينات التي تحتوي عليه، لأن هذا هو الإجراء الأكثر مباشرة للوقت الذي يمكن حفظه إذا تم تحسين هذا الخط.

يمكن لبعض المرابطين القيام بذلك، oprofile and surnatoright / التكبير بشكل خاص.

نصائح أخرى

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

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

تُستخدم تصاريح AFAIC وLLVM للأجهزة الثابتة، لأن الكود الذي تم إنشاؤه يكون في وقت الترجمة ومكتوب بالفعل في الملف الثنائي النهائي ويتضمن بالتأكيد جميع إيجابيات وسلبيات تقنيات الأجهزة الثابتة.

في الختام، إنها مسألة ما تحتاجه.يجب عليك اختيار الأداة المناسبة لعملك.

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