Dentre as diversas apresentações no Linux Kongress 2009 a palestra do Felix von Leitner’s me chamou atenção. Com título “Compiler Optimization Survey” ele discutiu os aspectos relacionados a programação nos compiladores modermos e as possibilidades de otimização (slides). A idéia básica é que:
- Otimização é importante
- Mas frequentemente: Código legível é mais importante
- Aprenda o que seu compilador faz
E então deixe-o fazê-lo.
Exemplo. As quatro instruções abaixo fazem a mesma coisa, zeram um registrador da CPU x86, qual é a melhor forma?

Analisando no GDB (x/FMT ADDRESS) temos:
movl 0xb8 0x00 0x00 0x00 0x00 andl 0x83 0xe0 0x00 subl 0x29 0xc0 xorl 0x31 0xc0
E agora? sub ou xor, veja que ambos produzem uma falsa dependência em %eax, mas a CPU sabe como ignorar no caso do xor.
Você sabia?
O compilador sim.
Se você usar o sub na prova seu professor provavelmente irá descontar alguns pontos ou te dar zero…
- Se você fizer uma otimizacão, teste em dados reais.
- Se tornar o código ilegível não tornar o programa drasticamente rápido, não faça.
andl 0×83 0xe0 0×00
subl 0×29 0xc0
xorl 0×31 0xc0