Porównanie pętli for i while - która wykonuje się szybciej?

0

Hey, mam pytanie: czy to prawda, że pętla for wykonuje się szybciej od pętli while?
Przykładowo czy jest różnica między:

while(true){...}
//a
for(;;){...}

?
Albo między:

for(int i=100; i>=0; --i){...}
//od
int i=100;
while(--i){...} //chociaż tutaj to chyba bardziej praktyczne byłoby while(i){--i; ...}

??
albo między:

for(int i=0; i<100; ++i){...}
//od
int i=0;
while(i>100){++i; ...}
1

To for jest przeważnie wolniejszy o jeden skok.
Poza tym, pytanie nie ma sensu bez sprecyzowania jaki kompilator z jakimi opcjami i na jaki system operacyjny.

0

Z reguły kompilator zoptymalizuje to do takiego samego kodu maszynowego. Zasada jest prosta: robisz to co jest czytelniejsze i zostaw kompilatorowi taką zabawę.

0

g++ -S prawdę ci powie

0

Dzięki za wypowiedzi :)

_13th_Dragon napisał(a):

To for jest przeważnie wolniejszy o jeden skok.

to "To" odnosi się do mojego for - tak jakbym zrobił coś specyficznie czy tak ogólnie każde for jest wolniejsze o jeden skok?
Pytam bo zastanawiam się czy chodzi o tą deklarację zmiennej "i" przed pętlą.

_13th_Dragon napisał(a):

Poza tym, pytanie nie ma sensu bez sprecyzowania jaki kompilator z jakimi opcjami i na jaki system operacyjny.

Wydawało mi się, że to akurat nie ma większego znaczenia :)

Shalom napisał(a):

g++ -S prawdę ci powie

Może to głupie pytanie (ciągle się uczę), ale czym jest g++ -S?

0
Michałex napisał(a):

Może to głupie pytanie (ciągle się uczę), ale czym jest g++ -S?

man g++

@karolinaa hahah +1

0

Wydawało mi się, że to akurat nie ma większego znaczenia

Masz rację: wydawało ci się...

Może to głupie pytanie (ciągle się uczę), ale czym jest g++ -S?

g++ to kompilator C++, jeden z popularniejszych, szczególnie na systemach unixowych. Opcja -S pozwala przeprowadzić kompilacje programu do poziomu asemblera. Możesz sobie skompilować różne wersje tej swojej pętli w ten sposób i zobaczyć jaki kod asemblera jest z tego generowany i czy w ogóle się czymś różnią ;)

0

Semantycznie:
for(a;b;c) { d; }
to to samo co:
{a; while(b) { d; c; }

Praktycznie może być różnica jeśli mało sprytny kompilator np nie wykryje, że while jest zamaskowanym forem i nie zastosuje pewnych optymalizacji, które zastosowałby gdyby dostał fora. Dlatego jeśli już iterujesz to lepiej forem - zarówno czytelniejsze jak i większa szansa na optymalizacje.

4

Zawsze zamiast zadawać dziwne pytania - można samemu przetestować i sprawdzić co się szybciej wykona ;]

BTW: Pisząc aplikację to naprawdę NAJOSTATNIEJSZE czym masz się martwić robiąc optymalizację kodu to to, czy użyć while czy for. Aplikacja będzie miała wąskie gardła, ale na pewno to nie będzie spowodowane typem pętli.

1 użytkowników online, w tym zalogowanych: 0, gości: 1