Quand dois-je omettre le pointeur de cadre?

Est-il très optimisation lors de la omettant le pointeur de l'image?
Si j'ai bien compris en lisant cette page, -fomit-frame-pointer est utilisé lorsque l'on veut éviter l'enregistrement, le montage et la restauration des pointeurs de frame.

Est ce fait que pour chaque appel de fonction, et si oui, est-il vraiment la peine d'éviter les quelques instructions pour chaque fonction?
N'est-il pas anodin pour une optimisation.
Quelles sont les réelles implications de l'utilisation de cette option en dehors de débogage limites?

J'ai compilé suivants du code C avec et sans cette option

int main(void)
{
        int i;

        i = myf(1, 2);
}

int myf(int a, int b)
{
        return a + b;
}

,

# gcc -S -fomit-frame-pointer code.c -o withoutfp.s
# gcc -S code.c -o withfp.s

.

diff -u 'ing les deux fichiers ont révélé que le code assembleur:


--- withfp.s    2009-12-22 00:03:59.000000000 +0000
+++ withoutfp.s 2009-12-22 00:04:17.000000000 +0000
@@ -7,17 +7,14 @@
        leal    4(%esp), %ecx
        andl    $-16, %esp
        pushl   -4(%ecx)
-       pushl   %ebp
-       movl    %esp, %ebp
        pushl   %ecx
-       subl    $36, %esp
+       subl    $24, %esp
        movl    $2, 4(%esp)
        movl    $1, (%esp)
        call    myf
-       movl    %eax, -8(%ebp)
-       addl    $36, %esp
+       movl    %eax, 20(%esp)
+       addl    $24, %esp
        popl    %ecx
-       popl    %ebp
        leal    -4(%ecx), %esp
        ret
        .size   main, .-main
@@ -25,11 +22,8 @@
 .globl myf
        .type   myf, @function
 myf:
-       pushl   %ebp
-       movl    %esp, %ebp
-       movl    12(%ebp), %eax
-       addl    8(%ebp), %eax
-       popl    %ebp
+       movl    8(%esp), %eax
+       addl    4(%esp), %eax
        ret
        .size   myf, .-myf
        .ident  "GCC: (GNU) 4.2.1 20070719 

Quelqu'un pourrait s'il vous plaît faire la lumière sur les clé points le code ci-dessus où l'option-fomit-frame-pointer n'a réellement faire la différence?

Edit: objdumpsortie de l'remplacé par gcc -S's

InformationsquelleAutor PetrosB | 2009-12-21