Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Velocidade de loop em C


evandrolnr

Pergunta

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;
}

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Você está colocando o nível de otimização como zero?

Abraços!

Apenas estou avaliando a performance das linguagens.

Veja alguns testes comparativos

Liguagem C 25 trilhões de iterações em meio segundo

Java 10 bilhões de iterações em 25 segundos

Natural* 5 milhões de iterações em 5 segundos

*Linguagem Nativa do banco de dados Adabas

Link para o comentário
Compartilhar em outros sites

  • 0

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;
}

Link para o comentário
Compartilhar em outros sites

  • 0

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;
}

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...