-Fomit-frame-pointer * omet-il toujours * le fp?

-Fomit-frame-pointer omet-il toujours le pointeur frame? Existe-t-il une situation où le pc et le fp doivent être configurés? La croissance dynamic de la stack oblige-t-elle le fp à être configuré? Demander spécifiquement pour MIPS32. Merci!

    Le pointeur de cadre n’est pas vraiment nécessaire pour une exécution correcte, sauf parfois pour un déroulement d’exception. La croissance dynamic de la stack nécessite généralement un certain type de pointeur de cadre, mais celui-ci n’est pas lié à un registre particulier, mais plutôt affecté via une parsing de stream de données normale.

    Fondamentalement, -fomit-frame-pointer rétrograde le FP d’une affectation de registre fixe en un pseudo-registre et soumet l’initialisation à l’élimination des -fomit-frame-pointer mortes. Donc, la réponse à la première question est non, elle ne l’oublie pas toujours.

    Non, le pointeur de cadre n’est normalement pas nécessaire. Le compilateur peut accéder aux variables locales par rapport au pointeur de la stack et n’a pas besoin d’un pointeur de cadre spécial.

    Néanmoins, la séquence de configuration standard du pointeur d’image peut être utile lors du débogage d’un programme bloqué (même si elle n’est pas compilée avec -g ), car le débogueur peut utiliser les informations du pointeur d’image pour reconstruire la stack d’appels. En l’absence de pointeur d’image, il ne dispose d’aucune information permettant de savoir où une image de stack commence et l’autre qui se termine.

    Ainsi, lorsque vous utilisez -fomit-frame-pointer vous -fomit-frame-pointer des performances pour un débogage bien plus difficile en cas de blocage. Si les composants essentiels à la performance de votre code sont de petites boucles et n’appellent aucune fonction, le fait d’omettre le pointeur du cadre n’apportera guère d’avantages non plus.

    Pas une personne mips, mais quelque chose qui devrait s’appliquer à n’importe quel système: si la stack doit être alignée à n’importe quel point, un cadre devrait être utilisé pour stocker le pointeur original (car l’adresse de la stack et son alignement peuvent ne pas être connus)