Question

Je rencontre un problème avec mon application iPhone. Chaque fois que je règle le niveau d'optimisation sur autre chose que "Aucun", des erreurs de calcul se produisent. Cela ne se produit que lors de la création du kit de développement logiciel (SDK) pour iPhone (le simulateur pour iPhone est toujours correct).

Cela ne me dérangerait pas de désactiver les optimisations en mode de publication, mais l'application est un peu trop lente lorsque je le fais.

L'application est complexe et il est donc difficile de localiser la partie optimisée de manière trop agressive.

Je pense que le problème est du côté de GCC puisqu'il semble avoir du mal à optimiser le code de l'architecture ARM.

Existe-t-il un moyen de ne désactiver les optimisations que pour certaines parties du code? Comment géreriez-vous ce genre de problème?

Était-ce utile?

La solution

Oui, c'est tout à fait possible. GCC a un attribut pour cela:

/* disable optimization for this function */
void my_function(void) __attribute__((optimize(0)));

void my_function(void) {
    /* ... */
}

Définit le niveau d'optimisation de cette fonction sur -O0 . Vous pouvez activer / désactiver des optimisations spécifiques:

/* disable optimization for this function */
void my_function(void) __attribute__((optimize("no-inline-functions")));

void my_function(void) {
    /* ... */
}

Autres conseils

Si l'optimisation modifie le comportement de votre programme, vous pouvez sans le vouloir vous fier à un comportement non défini ou défini par la mise en œuvre. Il serait peut-être intéressant d’examiner de plus près votre code en portant une attention particulière aux hypothèses sur les valeurs des variables et les ordres d’évaluation.

Vérifiez que vous renvoie correctement les valeurs de vos fonctions. D'après mon expérience, ce qui suit ne fonctionne que parfois:

int myFunc()
{
  x+7;
}

notez l'omission délibérée et non sécurisée du mot clé de retour

du fait que le registre utilisé dans le calcul de l'expression est identique au registre de retour.

Lorsque les optimisations sont activées, enregistrez les modifications d’utilisation et la fonction ne parvient pas à faire ce que vous voulez.

Vérifiez les avertissements de votre compilateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top