SlideShare uma empresa Scribd logo
1 de 11
Baixar para ler offline
e-stude.com
Dicas de Otimização em linguagem C
Fernando J. V. da Silva
fernando.silva@e-stude.com
e-stude.com

Prefira passar variáveis por referência;
Ao invés de...
void func(struct boo boo_var)
{
…
}
func(var);
Prefira:
void func(struct boo *boo_var)
{
…
}
func(&var);
Funções
e-stude.com
Funções
Fonte: http://www-ee.eng.hawaii.edu/~dyun/ee160/Book/chap14/subsection2.1.1.8.html
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
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
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
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
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;
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
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...
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

Mais conteúdo relacionado

Mais procurados (20)

Aula 4 | Funções
Aula 4 | Funções Aula 4 | Funções
Aula 4 | Funções
 
Introdução a Linguagem C
Introdução a Linguagem CIntrodução a Linguagem C
Introdução a Linguagem C
 
Linguagem C 06 Funcoes
Linguagem C 06 FuncoesLinguagem C 06 Funcoes
Linguagem C 06 Funcoes
 
Microsoft C#
Microsoft C#Microsoft C#
Microsoft C#
 
Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01Algoritmos C/C++ - Aula 01
Algoritmos C/C++ - Aula 01
 
C++ Funções
 C++ Funções C++ Funções
C++ Funções
 
Introdução à Linguagem C
Introdução à Linguagem CIntrodução à Linguagem C
Introdução à Linguagem C
 
Pged 02
Pged 02Pged 02
Pged 02
 
Curso de Linguagem C
Curso de Linguagem CCurso de Linguagem C
Curso de Linguagem C
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
Compiladores 1
Compiladores 1Compiladores 1
Compiladores 1
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04Aop Aspect J 1.5.4 Capitulo 04
Aop Aspect J 1.5.4 Capitulo 04
 
Apresentação Linguagem C
Apresentação Linguagem CApresentação Linguagem C
Apresentação Linguagem C
 
Linguagem C clecioamerico
Linguagem C clecioamericoLinguagem C clecioamerico
Linguagem C clecioamerico
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem c
 
SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
 
Introdução PHP + Kohana 3
Introdução PHP + Kohana 3Introdução PHP + Kohana 3
Introdução PHP + Kohana 3
 
Linguagem C 07 Registros
Linguagem C 07 RegistrosLinguagem C 07 Registros
Linguagem C 07 Registros
 
Linguagem C - Strings
Linguagem C - StringsLinguagem C - Strings
Linguagem C - Strings
 

Semelhante a Dicas C Otimização

Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Pythonguestac3de
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação CJose Augusto Cintra
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonIgor Sobreira
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroRogério Moraes de Carvalho
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 

Semelhante a Dicas C Otimização (20)

M2ti - Python Brasil
M2ti - Python BrasilM2ti - Python Brasil
M2ti - Python Brasil
 
Aula 1 | Introdução a C++
Aula 1 | Introdução a C++Aula 1 | Introdução a C++
Aula 1 | Introdução a C++
 
Minicurso Python
Minicurso PythonMinicurso Python
Minicurso Python
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Dev Ext PHP
Dev Ext PHPDev Ext PHP
Dev Ext PHP
 
Programando php com excelência
Programando php com excelênciaProgramando php com excelência
Programando php com excelência
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Introdução à Linguagem de Programação C
Introdução à Linguagem de Programação CIntrodução à Linguagem de Programação C
Introdução à Linguagem de Programação C
 
Funções e procedimentos
Funções e procedimentosFunções e procedimentos
Funções e procedimentos
 
Sapo Sessions PHP
Sapo Sessions PHPSapo Sessions PHP
Sapo Sessions PHP
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com PythonDjango - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
 
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuroVisual Studio Summit 2016: C# 7 - Olhando para o futuro
Visual Studio Summit 2016: C# 7 - Olhando para o futuro
 
Workshop Python.2
Workshop Python.2Workshop Python.2
Workshop Python.2
 
Ud2
Ud2Ud2
Ud2
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Comandos e expressões
Comandos e expressõesComandos e expressões
Comandos e expressões
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Aula2
Aula2Aula2
Aula2
 

Mais de Fernando Vieira da Silva

Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"Fernando Vieira da Silva
 
Jogos Multi-jogadores: Revisão sobre Redes de computadores
Jogos Multi-jogadores: Revisão sobre Redes de computadoresJogos Multi-jogadores: Revisão sobre Redes de computadores
Jogos Multi-jogadores: Revisão sobre Redes de computadoresFernando Vieira da Silva
 
Arquitetura Cliente-servidor em jogos Multi-jogadores
Arquitetura Cliente-servidor em jogos Multi-jogadoresArquitetura Cliente-servidor em jogos Multi-jogadores
Arquitetura Cliente-servidor em jogos Multi-jogadoresFernando Vieira da Silva
 
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"Fernando Vieira da Silva
 
Arquitetura ponto-a-ponto para jogos Multi-jogadores
Arquitetura ponto-a-ponto para jogos Multi-jogadoresArquitetura ponto-a-ponto para jogos Multi-jogadores
Arquitetura ponto-a-ponto para jogos Multi-jogadoresFernando Vieira da Silva
 
Problemas de Rede em Jogos Multi-jogadores
Problemas de Rede em Jogos Multi-jogadoresProblemas de Rede em Jogos Multi-jogadores
Problemas de Rede em Jogos Multi-jogadoresFernando Vieira da Silva
 
Introdução à Unity High Level API (HLAPI)
Introdução à Unity High Level API (HLAPI)Introdução à Unity High Level API (HLAPI)
Introdução à Unity High Level API (HLAPI)Fernando Vieira da Silva
 
Tratamento de latência em jogos Multi-jogadores
Tratamento de latência em jogos Multi-jogadoresTratamento de latência em jogos Multi-jogadores
Tratamento de latência em jogos Multi-jogadoresFernando Vieira da Silva
 
Instruções para Anotações de Emoções em Tweets
Instruções para Anotações de Emoções em TweetsInstruções para Anotações de Emoções em Tweets
Instruções para Anotações de Emoções em TweetsFernando Vieira da Silva
 
Identifying Emotions in Tweets related to the Brazilian Stock Market
Identifying Emotions in Tweets related to the Brazilian Stock MarketIdentifying Emotions in Tweets related to the Brazilian Stock Market
Identifying Emotions in Tweets related to the Brazilian Stock MarketFernando Vieira da Silva
 
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...Fernando Vieira da Silva
 

Mais de Fernando Vieira da Silva (14)

Introdução a jogos Multi-jogadores
Introdução a jogos Multi-jogadoresIntrodução a jogos Multi-jogadores
Introdução a jogos Multi-jogadores
 
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
Arquitetura de jogos multi-jogadores: Estudo de caso "Starsiege Tribes"
 
Jogos Multi-jogadores: Revisão sobre Redes de computadores
Jogos Multi-jogadores: Revisão sobre Redes de computadoresJogos Multi-jogadores: Revisão sobre Redes de computadores
Jogos Multi-jogadores: Revisão sobre Redes de computadores
 
Arquitetura Cliente-servidor em jogos Multi-jogadores
Arquitetura Cliente-servidor em jogos Multi-jogadoresArquitetura Cliente-servidor em jogos Multi-jogadores
Arquitetura Cliente-servidor em jogos Multi-jogadores
 
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
Arquitetura de Jogos Multi-jogadores: Estudo de caso "Age of Empires"
 
Arquitetura ponto-a-ponto para jogos Multi-jogadores
Arquitetura ponto-a-ponto para jogos Multi-jogadoresArquitetura ponto-a-ponto para jogos Multi-jogadores
Arquitetura ponto-a-ponto para jogos Multi-jogadores
 
Escalabilidade em Jogos Multi-jogadores
Escalabilidade em Jogos Multi-jogadoresEscalabilidade em Jogos Multi-jogadores
Escalabilidade em Jogos Multi-jogadores
 
Problemas de Rede em Jogos Multi-jogadores
Problemas de Rede em Jogos Multi-jogadoresProblemas de Rede em Jogos Multi-jogadores
Problemas de Rede em Jogos Multi-jogadores
 
Introdução à Unity High Level API (HLAPI)
Introdução à Unity High Level API (HLAPI)Introdução à Unity High Level API (HLAPI)
Introdução à Unity High Level API (HLAPI)
 
Tratamento de latência em jogos Multi-jogadores
Tratamento de latência em jogos Multi-jogadoresTratamento de latência em jogos Multi-jogadores
Tratamento de latência em jogos Multi-jogadores
 
Segurança em Jogos Multi-jogadores
Segurança em Jogos Multi-jogadoresSegurança em Jogos Multi-jogadores
Segurança em Jogos Multi-jogadores
 
Instruções para Anotações de Emoções em Tweets
Instruções para Anotações de Emoções em TweetsInstruções para Anotações de Emoções em Tweets
Instruções para Anotações de Emoções em Tweets
 
Identifying Emotions in Tweets related to the Brazilian Stock Market
Identifying Emotions in Tweets related to the Brazilian Stock MarketIdentifying Emotions in Tweets related to the Brazilian Stock Market
Identifying Emotions in Tweets related to the Brazilian Stock Market
 
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
Identifying Emotions in Tweets for Brazilian Stock Market Prediction (WTD Pre...
 

Dicas C Otimização