هل يأخذ برنامج التحويل البرمجي GCC C ++ في الاعتبار __restrict - بيانات؟
-
29-09-2019 - |
سؤال
لقد قمت بالتحقيق في تأثير __restricting بعض المؤشرات في رمز C ++ ، عند تجميعه عبر GCC-Compiler.
تحولت أنه ليس فقط وقت التشغيل لا يزال كما هو ، ولكن يبدو أن القابلة للتنفيذ قد تغير ، فإن الحجم في البايتات هو نفسه بالضبط كما كان من قبل.
Version-Version الخاص بي
gcc version 4.3.2 [gcc-4_3-branch revision 141291] (SUSE Linux)
وعلى الرغم من أنه يقبل هذا التمديد C ++ عند التحليل ، إلا أنه لا يبدو أنه يعتبره عند تجميع الكود. لذلك ، هناك سبب ، لا يعرف المترجم كيفية استخدام هذه المعلومات الدلالية ، أو يتم تعطيل هذه المعلومات تمامًا.
يقوم الرمز بإجراء الكثير من الأرقام ، ويود تمكينه لأغراض الاختبار. هل يمكنك المساعدة؟
المحلول
restrict
تعد التصفيات في الأساس وسيلة للمستخدم لمساعدة التحويل البرمجي على إجراء بعض التحسينات المتعلقة بالتعليقات. سيكون لديهم تأثير فقط إذا كانت فرص التحسين هذه موجودة بالفعل في الكود ، لذلك باستخدام restrict
ببساطة يمكّنهم في المواقف عندما كان على المترجم سابقًا استخدام توليد رمز "أكثر أمانًا" (غير مثالي). في سياقات أخرى restrict
لن يكون لها أي تأثير على الإطلاق.
لذلك ، أضفت بعض restrict
التصفيات إلى الكود الخاص بك. ولكن هل تم استخدام أي منهم في السياق الذي يهم فيه بالفعل ، أي المكان الذي يمنحون فيه بالفعل المترجم المزيد من الحرية لتحسين الكود؟ إذا لم يكن الأمر كذلك ، فليس من المفترض أن تتوقع تغيير الكود الخاص بك.