Apresentação com o material da palestra com dicas de otimização em linguagem C, que apresentei no 11° Encontro C/C++ Brasil e na 22° Semana da Engenharia da Facens.
4. e-stude.com
Para funções pequenas, você pode usar “inline”:
inline int calc_something( int x, int y )
{
…
}
Motivo: o compilador tenta expandir o código onde elas são
chamadas (código maior, mas mais rápido)
Funções
5. e-stude.com
Prefira variáveis locais. Elas podem (e geralmente são)
armazenadas em registradores:
Escolha de variáveis
Fonte: http://scienceblogs.com/goodmath/2007/06/28/graph-coloring-algorithms-1/
Variáveis Registrador
a, d, e EAX
c, f EBX
d ECX
Possível alocação de registradores
6. e-stude.com
Prefira switch ao invés de vários if's
if( val == 1)
dostuff1();
else if (val == 2)
dostuff2();
else if (val == 3)
dostuff3();
switch( val ) {
case 1: dostuff1(); break;
case 2: dostuff2(); break;
case 3: dostuff3(); break;
}
Switch vs Ifs
7. e-stude.com
Prefira usar arrays de 1 dimensão ao invés de multidimensional
Vetores
Fonte: https://www.eskimo.com/~scs/cclass/int/sx9b.html
8. e-stude.com
Loops invertidos
Loops “for” invertidos são mais otimizados, pois a comparação
entre dois valores requer uma instrução a mais para obter o valor
da stack
for (i=0; i<n; i++) for (i=n; i>0; i--)
result += i; result += i;
9. e-stude.com
Benchmark
Código Tempo Economia
Multiplicação de
Matrizes original
2622 segundos -
Vetor 1 dimensão 2607 segundos 15 segundos
Vetor 1 dimensão +
Loop invertido
2586 segundos 36 segundos
Multiplicação de 2 matrizes de int de dimensões 5000x5000
10. e-stude.com
Otimize a complexidade computacional do seu algoritmo!
Reduza as operações de I/O, se possível...
Procure conhecer as opções de otimização do seu compilador
preferido!
Otimize com moderação :)
E claro...
11. e-stude.com
Curso online de
Linguagem C
Profissional
Inscrições abertas!
Nova turma a partir de 10/04
Mais informações:
contato@e-stude.com
Dúvidas?
fernando.silva@e-stude.com
www.e-stude.com