evandrolnr Postado Maio 19, 2010 Denunciar Share Postado Maio 19, 2010 Pessoal, estou impressionado com a velocidade de execução de um loop na linguagem C.O programa abaixo gera 25 trilhões de iterações, e é executado imediatamente (não leva nem meio segundo).Estou fazendo alguma coisa errada, ou é isto mesmo? :blink: Estou usando sistema operacional Unix, computador IBM, AIX./* TestaLoop.c */ #include <stdio.h> #include <stdlib.h> int main(){ for(int i=0;i< 5000000;i++) for(int j=0;j< 5000000;j++) if (i == 3000000 && j == 3000000) printf("\nachou i e j %d\t%d\n",i,j); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Maio 19, 2010 Denunciar Share Postado Maio 19, 2010 Você está colocando o nível de otimização como zero?Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 evandrolnr Postado Maio 20, 2010 Autor Denunciar Share Postado Maio 20, 2010 Você está colocando o nível de otimização como zero?Abraços!Apenas estou avaliando a performance das linguagens.Veja alguns testes comparativosLiguagem C 25 trilhões de iterações em meio segundoJava 10 bilhões de iterações em 25 segundosNatural* 5 milhões de iterações em 5 segundos*Linguagem Nativa do banco de dados Adabas Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Maio 20, 2010 Denunciar Share Postado Maio 20, 2010 Realmente pode ser o compilador otimizando o código. Ele pode nem estar executando o for pois sabe que apenas 1 condição será verdadeira!adicione o modificador volatile nas variáveis i e j para eliminar essa otimização:/* TestaLoop.c */ #include <stdio.h> #include <stdlib.h> int main(){ for(volatile int i=0;i< 5000000;i++) for(volatile int j=0;j< 5000000;j++) if (i == 3000000 && j == 3000000) printf("\nachou i e j %d\t%d\n",i,j); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 evandrolnr Postado Maio 20, 2010 Autor Denunciar Share Postado Maio 20, 2010 Agora sim, está com o tempo de execução mais coerente.O loop de 1 bilhão de iterações levou 30 segundos.Obrigado!/* TestaLoop.c */ #include <stdio.h> #include <stdlib.h> int main(){ /* for(int i=0;i< 5000000;i++) for(int j=0;j< 5000000;j++) if (i == 3000000 && j == 3000000) printf("\nachou i e j %d\t%d\n",i,j); */ for(volatile int i=0;i< 1000000;i++) for(volatile int j=0;j< 1000;j++) if (i == 10000 && j == 500) printf("\nachou i e j %d\t%d\n",i,j); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
evandrolnr
Pessoal, estou impressionado com a velocidade de execução de um loop na linguagem C.
O programa abaixo gera 25 trilhões de iterações, e é executado imediatamente (não leva nem meio segundo).
Estou fazendo alguma coisa errada, ou é isto mesmo? :blink:
Estou usando sistema operacional Unix, computador IBM, AIX.
Link para o comentário
Compartilhar em outros sites
4 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.