En essayant de comprendre gcc avec l'option -fomit-frame-pointer

J'ai demandé à Google de me donner la signification de la gcc option -fomit-frame-pointer, qui me redirige vers la déclaration ci-dessous.

-fomit-frame-pointer

Ne pas garder le pointeur de cadre dans un registre pour les fonctions qui n'en a pas besoin. Cela évite les instructions pour enregistrer, à configurer et à restaurer l'image des pointeurs; il rend également un supplément de registre disponible dans de nombreuses fonctions. Il rend également impossible de débogage sur certaines machines.

Que par ma connaissance de chaque fonction, une activation de l'enregistrement va être créé dans la pile de la mémoire du processus à garder toutes les variables locales et certains plus d'informations. J'espère que ce pointeur de cadre moyen de l'adresse de l'activation de l'enregistrement d'une fonction.

Dans ce cas, quels sont les types de fonctions, pour lesquelles il n'a pas besoin de garder le pointeur de cadre dans un registre? Si je peux obtenir cette information, je vais essayer de la conception de la nouvelle fonction sur la base que (si possible) parce que si le pointeur de l'image n'est pas conservé dans les registres, des instructions seront omis dans le binaire. Cela va vraiment améliorer les performances sensiblement dans une application où il y a beaucoup de fonctions.

  • Devoir de débogage juste un crash dump de code qui a été compilé avec cette option sera suffisant pour vous rendre à l'accise cette option à partir de votre makefiles. Elle ne supprime pas toutes les instructions btw, il donne juste l'optimiseur d'un s'inscrire pour travailler avec pour le stockage.
  • En fait, c'est assez utile pour la release. Avoir deux cibles dans un Makefile - Release et Debug est en fait très utile, prendre cette option comme un exemple.
InformationsquelleAutor rashok | 2013-02-02