Достаточно ли безумный уровень оптимизации gcc (-O3)?

В ответ на другой вопрос я хотел показать, что безумный уровень оптимизации gcc ( -O3 ) в основном будет удалите все переменные, которые не использовались в main. Код был:

#include <stdio.h>
int main (void) {
   char bing[71];
   int x = 7;
   bing[0] = 11;
   return 0;
}

, а вывод gcc -O3 был:

    .file "qq.c"
    .text
    .p2align 4,,15
.globl main
    .type main, @function
main:
    pushl %ebp
    xorl %eax, %eax
    movl %esp, %ebp
    popl %ebp
    ret
    .size main, .-main
    .ident "GCC: (Ubuntu 4.4.3-4ubuntu5) 4.4.3"
    .section .note.GNU-stack,"",@progbits

Теперь я вижу, что он удалил локальные переменные, но там все еще довольно много потерь. Мне кажется, что весь раздел:

    pushl %ebp
    xorl %eax, %eax
    movl %esp, %ebp
    popl %ebp
    ret

можно было бы заменить на более простой:

    xorl %eax, %eax
    ret

Кто-нибудь знает, почему gcc не выполняет эту оптимизацию? Я знаю, что это очень мало сэкономит для самого main , но, если бы это было сделано и с обычными функциями, эффект излишней настройки указателя стека в массивном цикле был бы значительным.

Используемая команда для создания сборки было:

gcc -O3 -std=c99 -S qq.c
9
задан paxdiablo 23 February 2011 в 04:38
поделиться