Hoje, fiquei com vontade de testar diferença entre usar ou não a palavra chave "register" na declaração de variáveis em C. No livro do Kris Jamsa está ecrito que essa palavra chave faz com que a variável não fique na memória primária do computador e sim em um registrador da CPU, o que teoricamente faz o acesso ser bem mais rápido.
Testei esse programinha, em C:
#include "stdio.h"
#include "time.h"
int main() {
long register i;
long register j;
int begin,
end;
time_t t1,
t2;
char c;
begin = time(&t1);
for(i = 0; i < 100000; i++) {
for(j = 0; j < 100000; j++) {
}
}
end = time(&t2);
printf("%d\npress any key to continue", end - begin);
gets(&c);
}
O compilador gcc gerou um executável que leva 43 segundos para executar. Retirando a palavra "register" o tempo foi o mesmo :(.
Pensei: "Será o compilador? Seria o Windows que não libera registradores para eu usar? Ou é mesmo o computador? resgiter realmente funciona?"
Fiz o que tinha condição de fazer. Mudei para o compilador Borland. E advinhem o resultado? O mesmo...contudo, levou 6 segundos para concluir a tarefa!!!!
Incrível!!!
Passed in SCBCD 5 exam
Há 14 anos
2 comentários:
Será que esse parâmetro "register" não é mais utilizado pelos compiladores modernos?
Eu acho de qualquer maneira pode ser potecialmente perigoso e irracional guardar uma variavel diretamente num registrador. Vc tentou com o tipo short? será q tem diferença? short é muito menor poderia "caber" melhor?
E essa eficiencia de velocidade dependendo do compilador? Existe algum teste com os diversos compiladores? fiquei triste do GCC ser tão ineficiente.
Pode ser verdade isso que vc falou. Depois vou fazer um teste com short.
Eu fiquei espantado com a ineficiência do gcc.
Acho que eles deviam trocar uma idéias com o pessoal da Borland, hehee
Postar um comentário