Szybkość funkcji ze wskaźnikami i bez
Ostatnio zmodyfikowano 2016-10-27 18:28
mateczek |
» 2016-10-25 20:28:19 masz takie same czasy bo wyświetlasz tą samą zmienną. Aczkolwiek wątpię by różnice były podyktowane algorytmem najwolniejsze z tego wszystkiego jest cout :P int main() { char ostrzezenie[ 80 ] = { "Alarm trzeciego stopnia" }; cout << setprecision( 20 ); cout << "wersja tablicowa \n"; tp start = std::chrono::system_clock::now(); przedzielacz_tabl( ostrzezenie ); duration d = std::chrono::system_clock::now() - start; cout << endl << d.count(); cout << "\nwersja wskaznikowa \n"; tp start1 = std::chrono::system_clock::now(); przedzielacz_wsk( ostrzezenie ); duration d1 = std::chrono::system_clock::now() - start1; cout << endl << d.count(); return 0; |
|
carlosmay |
» 2016-10-25 21:52:27 Aczkolwiek wątpię by różnice były podyktowane algorytmem najwolniejsze z tego wszystkiego jest cout :P |
... i to też można przyspieszyć. |
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2016-10-25 22:14:25 @mateczek Dzięki wielki. Jak zwykle najprostszy (najgłupszy) błąd... Widać różnicę, widać :P W Symfonii pisze, że używanie wskaźników jest szybsze. Nie pisze, że w tym konkretnym przypadku tak jest. Ja to chciałem po prostu sprawdzić na własną rękę. |
|
pekfos |
» 2016-10-26 00:37:53 W Symfonii pisze, że używanie wskaźników jest szybsze. |
Szybsze od czego? |
|
mateczek |
» 2016-10-26 06:45:11 Nawet jeśli w przypadku tablic inkrementowana jest zmienna, A potem do początku tablicy dodawana wartość tej zmiennej po by policzyć adres elementu. Nie jest to coś czym należało by zaprzątać sobie głowę. Różnice w czasie są niezauważalne. |
|
Monika90 |
» 2016-10-26 16:25:07 Może nie włączyłeś optymalizacji.
void przedzielacz_tabl( char tab[] ) { int i = 0; while( tab[ i ] ) { cout << tab[ i++ ] << "-"; } }
|
Wg deklaracji typem parametru tab jest tablica o nieznanym rozmiarze, ale reguły C i C++ nakazują kompilatorom przekształcić taką deklarację w char* tab, więc tab to jest wskaźnik, dokładnie taki sam jak w w funkcji void przedzielacz_wsk(char * w); |
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2016-10-27 18:28:07 Czyli jest to wskaźnik to tab [0]? Co masz na myśli mówiąc o optymalizacji? Z tego co widziałem to ludziom w takiej sytuacji zawsze druga pętla (u mnie ta "wskaźnikowa") wykonuje się szybciej.
|
|
1 « 2 » |