سؤال

وأواجه مشكلة مزعجة مع بلدي التطبيق فون. كلما تعيين مستوى الأمثل لشيء آخر من "لا شيء"، وأحصل على أخطاء حسابية. يحدث هذا فقط في عند بناء ل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) {
    /* ... */
}

نصائح أخرى

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

و. قد يكون من المفيد أن نلقي نظرة فاحصة على التعليمات البرمجية الخاصة بك مع العين في اتجاه افتراضات حول قيم المتغيرات وأوامر من التقييم.

يرجى التحقق كنت returning القيم بشكل صحيح من مهامكم. في تجربتي، ما يلي يعمل فقط في بعض الأحيان:

int myFunc()
{
  x+7;
}

ملاحظة هذا الإغفال المتعمد وغير آمن من الكلمة عودة

ونظرا لسجل المستخدمة في حساب التعبير هي نفسها كما سجل العائد.

وعندما يتم تشغيل تحقيق أمثلية على، تسجيل التغيرات في استخدام وفشل وظيفة لتفعل ما تريد.

وتحقق تحذيرات المترجم الخاص بك.

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