Kieli on siis C ja kääntäjä on gcc, linuxilla.
Takaisin melko nopean algoritmin Putkapostiin, mutta nyt pitäisi saada mitattua aika.
Aika on pienempi kuin 1 sekunti, joten seuraava koodi ei toimi.
#include <stdio.h> #include <time.h> ... int main() { time_t alku; time_t loppu; time(&alku); ... ... ... time(&loppu); printf("%i",loppu-alku); }
Tulostaa 0:n, joten tarkempaa ajanottoa olisin vailla.
Jos kerran olet Linuxilla, voit käyttää time-komentoa: time ohjelma.exe
.
EDIT: vaikka ei varmaankaan .exe, Linux-ohjelmahan se lienee :-)
Kappas siinä on niinkin kätevä käsky.
Mitähän sen tulostamat tulokset käytännössä tarkoittavat, kun en man:lla ymmärtänyt.
real 0m0.051s user 0m0.033s sys 0m0.001s
l. Jos oikein ymmärsin, niin sen ajaminen kestää reilut 5 sadasosaa. No ohjelmassa on vielä paljon löysiä, joten hyväksyttäneen.
Ensimmäinen on siis oikeasti kulunut aika, jonka ohjelma oli käynnissä. Kaksi muuta ovat käytetyn prosessoriajan eri osia, eli niiden summa on ohjelman oikeasti käyttämä aika. Ensimmäiseen saattavat vaikuttaa myös se, paljonko muita ohjelmia ajetaan, ja se, kun käyttäjältä mahdollisesti odotetaan syötettä tai ohjelma on muuten "tauolla".
Näin käsittääkseni.
Eli esimerkiksi tuossa sys
:ssä on mukaanlaskettuna vastausten tulostus, kun taas user
:ssa käytännössä vain niiden lasku. "Käytännössä" siksi, että siihen tietääkseni lasketaan mukaan esimerkiksi printf
:n kutsumiseen mennyt aika, kun taas sys
:ssä on varsinainen tulostus.
Varsinainen ohjelman käyttämä aika on siis user
.
Jotenkin näin onnistunee:
clock_t start, end; start = clock(); ... ajastettava koodi ... end = clock(); printf ("%f\n", (end - start) / CLOCKS_PER_SEC);
Aihe on jo aika vanha, joten et voi enää vastata siihen.