Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Szybkość funkcji ze wskaźnikami i bez

Ostatnio zmodyfikowano 2016-10-27 18:28
Autor Wiadomość
Lich555
Temat założony przez niniejszego użytkownika
Szybkość funkcji ze wskaźnikami i bez
» 2016-10-24 21:52:44
Witam.
Zrobiłem ostatnio taki mini programik mierzący czas wykonywania funkcji bez i z użyciem wskaźników. Jest taki problem, że czas jest identyczny w obu przypadkach. Czyżby funkcje były za małe, żeby widać było różnice? Funkcja wykonywana z pomocą wskaźników nie powinna się cechować szybszym wykonaniem?
C/C++
#include <iostream>
#include <chrono>
#include <iomanip>

using namespace std;
using tp = std::chrono::time_point < std::chrono::system_clock >;
using duration = std::chrono::duration < float >;

void przedzielacz_tabl( char tab[] );
void przedzielacz_wsk( char * w );

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;
}
//**********************************************************************
void przedzielacz_tabl( char tab[] )
{
    int i = 0;
   
    while( tab[ i ] )
    {
        cout << tab[ i++ ] << "-";
    }
}
//**********************************************************************
void przedzielacz_wsk( char * w )
{
    while( * w )
    {
        cout << *( w++ ) << "-";
    }
}
P-152888
Gibas11
» 2016-10-24 21:58:14
Musiałbyś zrobić straszne cuda z kompilatorem, żeby te 2 funkcje wygenerowały różny kod maszynowy. Bo zdziwię się, jeśli w ramach optymalizacji kompilator nie sprowadził obu do czegoś dokładnie takiego samego.
P-152889
carlosmay
» 2016-10-24 22:02:51
Można wiedzieć jakie masz wyniki?
P-152890
Lich555
Temat założony przez niniejszego użytkownika
» 2016-10-24 22:40:37
Wyniki nie zawsze są takie same, co mnie lekko zdziwiło (tzn. w stosunku do siebie, to czasy funkcji są identyczne, po prostu zmieniają się z każdym odpaleniem programu). Przykładowy wynik dla 10 miejsc po przecinku (dalej są takie same liczby, ale nie chce mi się przepisywać, napiszę tylko czasy wykonania, reszta zapewne dla Ciebie nieważna):
C/C++
0.0015010000
0.0015010000
P-152894
pekfos
» 2016-10-24 22:46:52
Obie funkcje używają wskaźnika.
P-152896
Lich555
Temat założony przez niniejszego użytkownika
» 2016-10-24 23:04:34
Jest to przykład z Symfonii C++, wg której poruszanie się po tablicy za pomocą wskaźnika jest szybsze.
P-152898
pekfos
» 2016-10-24 23:12:23
W tak prostym scenariuszu, bzdura.
P-152900
Gibas11
» 2016-10-24 23:27:24
>Symfonia c++
>2016
Wybierz jedno? Ta książka najwyraźniej nie tłumaczy już dobrze nawet podstaw.
P-152903
« 1 » 2
  Strona 1 z 2 Następna strona