Есть ли существенная оптимизация при отсутствии указателя кадра?
Если я правильно понял, прочитав эту страницу, -fomit-frame-pointer используется, когда мы хотим избежать сохранения, настройки и восстановления указателей кадров.
Это делается только для каждого вызова функции, и если да, действительно ли стоит избегать нескольких инструкций для каждой функции? Разве это не тривиально для оптимизации. Каковы фактические последствия использования этой опции помимо ограничений отладки?
Я скомпилировал следующий код C с этой опцией и без нее
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 'в двух файлах показан следующий код сборки:
--- 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 
Может кто-то пролить свет на ключевые точки вышеприведенного кода, где -fomit-frame-pointer действительно сделал разницу?
  Изменить: objdump вывод заменен на gcc -S