diferença de eficiencia entre pré e pos incremento

2 respostas
sk2ck

Eu li no “Java Como Programar”, (6 edição pag: 130) que há uma vantagem de desempenho em você usar em um loop for um pré-incremento em relação ao pós-incremento. Gostaria de saber o porque… Como chegou-se a essa conclusão???

2 Respostas

pablofaria

Vamos lá, mais não sei se isso vai ajudar muito…

quando fazemos
“i++” ou “++i”
apesar de terem o mesmo sentido (se levarmos em consideração que todos dois adicionam um a variável)
e consequência o que realmente acontece em nível de processamento, o primeiro pode-se levar quase o dobro do esforço e consequentimente o dobro do tempo…

Acontece que quando o seu código é compilado para uma plataforma específica ele é codificado em instruções de processamento daquela prataforma, e isso é gerenciado inteiramente pela plataforma em questão, e a disponibilidade varia de plataforma.

E em codificação de nível de processamento é como se o “i++” fizesse algo como “i=i+1”, que seguindo os passos do processador, ele coloca o valor 1 em um registrador diferente do da variável i e depois o atribui, já o “++i” como é um pré-incremento é colocado exatamente no mesmo registrador… O que leva pelo menos metade do esforço, assim, metade do tempo.

Mais esse tempo é muito pouco, e não compensa contabilizá-lo

Espero que não esteje mais confuso, nem com dor de cabeça…

ViniGodoy

A razão é simples:

Sempre que você faz i++, você está assumindo que a soma ocorrerá depois da instrução.
O que significa que a VM deve fazer uma cópia dessa variável, até que a função termine.

No java isso não é um problema crítico e, na prática, não é algo com que você devesse se preocupar.
Em C++, isso pode ser um problema (já que i++ pode se referir a soma de um iterator e, nesse caso, um objeto inteiro será copiado).

Eficiência se busca com profiling e análise de gargalos. Micro-otimizações como essa podem não ter qualquer efeito no que é percebido no código.

Criado 15 de dezembro de 2007
Ultima resposta 16 de dez. de 2007
Respostas 2
Participantes 3