كيفية التعامل مع مشاكل المترجم الأمثل
-
10-07-2019 - |
سؤال
وأواجه مشكلة مزعجة مع بلدي التطبيق فون. كلما تعيين مستوى الأمثل لشيء آخر من "لا شيء"، وأحصل على أخطاء حسابية. يحدث هذا فقط في عند بناء لSDK فون (المحاكية فون هو دائما على ما يرام).
وأنا لا يمانعون في تعطيل تحسينات في وضع الإفراج عنهم، ولكن التطبيق هو القليل بطيئة جدا عندما أفعل ذلك.
وتطبيق معقد، ولذلك فمن الصعب تحديد الجزء الذي هو الأمثل بقوة أيضا.
وأعتقد أن المشكلة هي في الجانب مجلس التعاون الخليجي نظرا لأنه يبدو أن لديك مشكلة تحسين رمز للبنية ARM.
هل هناك طريقة لتعطيل أمثل فقط فقط لجزء معين من قانون؟ كيف يمكنك التعامل مع هذا النوع من القضايا؟
المحلول
نعم، هذا ممكن تماما. لديها مجلس التعاون الخليجي و السمة للحصول على ما يلي:
/* disable optimization for this function */
void my_function(void) __attribute__((optimize(0)));
void my_function(void) {
/* ... */
}
ويضبط مستوى الأمثل لتلك الوظيفة إلى -O0
. يمكنك تمكين / تعطيل تحسينات محددة:
/* disable optimization for this function */
void my_function(void) __attribute__((optimize("no-inline-functions")));
void my_function(void) {
/* ... */
}
نصائح أخرى
و. قد يكون من المفيد أن نلقي نظرة فاحصة على التعليمات البرمجية الخاصة بك مع العين في اتجاه افتراضات حول قيم المتغيرات وأوامر من التقييم.
يرجى التحقق كنت return
ing القيم بشكل صحيح من مهامكم. في تجربتي، ما يلي يعمل فقط في بعض الأحيان:
int myFunc()
{
x+7;
}
ملاحظة هذا الإغفال المتعمد وغير آمن من الكلمة عودة م>
ونظرا لسجل المستخدمة في حساب التعبير هي نفسها كما سجل العائد.
وعندما يتم تشغيل تحقيق أمثلية على، تسجيل التغيرات في استخدام وفشل وظيفة لتفعل ما تريد.
وتحقق تحذيرات المترجم الخاص بك.