On Jan 2, 2008 10:01 AM, Ricardo Nabinger Sanchez <[EMAIL PROTECTED]> wrote: > On Wed, 2 Jan 2008 00:23:21 -0200 > "Joao Rocha Braga Filho" <[EMAIL PROTECTED]> wrote: > > > Alguém já olhou a geração de código de um gcc atual? > > Sim. > > > > > Com a opção -O3, se uma função for "static" e só é chamada uma > > vez, ele some com ela introduzindo o código no local de chamada. > > static em funções diz ao compilador que ela é local àquela unidade de > compilação (.o), e portanto o símbolo gerado não será visível. Sendo
Sim.. e eu contava com a possibilidade da função sumir, mas ele sumiu até mesmo com os símbolos e integrou até mesmo as funções grandes. > assim, não tem porque o compilador criar uma entrada para ele na .symtab > se ninguém vai usar. Em outras palavras, isto está OK. :) > > > > > E tem mais. Uma printf para só imprimir uma string é trocada por > > uma puts, e com passagem de parâmetros por registradores, e não > > por pilha. Ele faz isto em muitas outras coisas. Eu já tinha ficado > > meio assombrado com o que ele fazia a alguns anos atrás, mas o > > pessoal ainda deu mais um capricho agora. > > Esse e mais um monte de truques. Como a printf com passagem de parâmetros por registrador. :^) > > > > > Eu descobri isto parando o compilador a etapa do assembler, com > > a opção -S. Estou usando a versão AMD64. > > Tem uma outra onde tu pode ver a saída de cada estágio, inclusive os de > otimização. Gera um montão de arquivos, alguns que não tem como > entender sem conhecer a estrutura interna do GCC, mas interessantes > mesmo assim. Eu aprendi assembler do PDP 11/70 assim, com a opção -S. Comecei com o FORTRAN, e depois, quando comecei aprender C, fiz o mesmo. Ei ainda usava o adb, assembler debuger. Tinha cegado ao ponto de olhar para o assembler e ver na minha mente o código que o gerou. Mas com o nível de otimização atual isto é muito difícil. Lá pela versão 2.x o gcc já modificava loops por conta própria, e muitas outras coisas. Se você fizesse um loop de 0 a 10, e a variável de controle não fosse usada dentro do loop, ele invertia por conta própria, pois é mais fácil testar se é zero do que qualquer outra coisa. Eu achei uma pena a AMD não ter feito o processador de 64 bits dela ortogonal, como os PDP 11, os VAX e os Motorola 68K. Seria muito bom de entender o código assembler e geraria menos código. João Rocha. > > > -- > Ricardo Nabinger Sanchez [EMAIL PROTECTED] > Powered by FreeBSD http://rnsanchez.wait4.org > > "Left to themselves, things tend to go from bad to worse." > > ------------------------- > Histórico: http://www.fug.com.br/historico/html/freebsd/ > Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd > -- "Sempre se apanha mais com as menores besteiras. Experiência própria." [EMAIL PROTECTED] [EMAIL PROTECTED] http://www.goffredo.eti.br ------------------------- Histórico: http://www.fug.com.br/historico/html/freebsd/ Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd