هل يأخذ برنامج التحويل البرمجي GCC C ++ في الاعتبار __restrict - بيانات؟

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

سؤال

لقد قمت بالتحقيق في تأثير __restricting بعض المؤشرات في رمز C ++ ، عند تجميعه عبر GCC-Compiler.

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

Version-Version الخاص بي

gcc version 4.3.2 [gcc-4_3-branch revision 141291] (SUSE Linux)

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

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

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

المحلول

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

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

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