Unixtopia
main/ artigos/
Otimização
Significa tornar um programa mais eficiente em termos de uso de algum recurso de computação ou por qualquer métrica semelhante, geralmente visando maior velocidade de execução ou menor uso de memória, mas também menor consumo de energia e demanda de velocidade de rede, enquanto preserva como o programa funciona externamente, isso pode ser feito manualmente reescrevendo partes do seu programa, ou automaticamente, normalmente pelo compilador quando ele está traduzindo seu programa.
Ao contrário da refatoração, que visa principalmente uma melhor legibilidade do source-code, a otimização muda o comportamento interno do programa executado para um mais otimizado. Além de otimizar programas e algoritmos, também podemos falar mais amplamente sobre otimizar, como estruturas de dados, formatos de arquivo, hardware, protocolo e assim por diante.
Otimização manual
Essas são otimizações que você mesmo faz escrevendo um código melhor ou mexendo com a forma como compila seu código.
Dicas e truques gerais
Essas são principalmente para C, mas podem ser úteis em outras linguagens:
- Diga ao seu compilador para realmente otimizar automaticamente, `-O3, -Os`. Verifique também outros sinalizadores do compilador que podem ajudá-lo a desligar coisas desnecessárias que você não precisa, e experimente compiladores diferentes, alguns podem apenas produzir um código melhor. Se você for corajoso, verifique também sinalizadores ainda mais agressivos como `-Ofast` e `-Oz`, que podem ser mais rápidos que `-03,` mas podem quebrar seu programa também.
- Cuidado, o que é rápido em uma plataforma pode ser lento em outra, conheça sua plataforma e compilador. Isso depende do conjunto de instruções, bem como do compilador, sistema operacional, implementação de biblioteca, hardware disponível, implementação de driver e outros detalhes. Você sempre precisa testar na plataforma específica para ter certeza de quão rápido ela será executada. Com compiladores simples que não fazem muitas otimizações automáticas, você pode querer fazer truques inteligentes para otimizar manualmente, o que pode, no entanto, confundir compiladores mais inteligentes que otimizam bem, mas dependem de código idiomático, otimizar algo para uma plataforma pode ser mais lento em outra plataforma. Uma boa abordagem é provavelmente otimizar para a plataforma mais fraca que você deseja oferecer suporte, se ela roda rápido em uma plataforma fraca, uma plataforma melhor provavelmente ainda rodará rápido, mesmo que não de forma otimizada.