Come posso programmare il mio programma C?
Domanda
Ho guardato attraverso i vecchi thread ma non sono riuscito a trovare la risposta alla mia domanda:
Come posso sincronizzare il corpo della mia funzione all'interno di un programma C?
Soluzione
Un metodo semplice è usare la funzione 'clock':
#include <time.h>
clock_t start, end;
double cpu_time_used;
start = clock();
... /* Do whatever you want to time */
end = clock();
cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC;
O se sei su Linux puoi usare il comando 'time' per calcolare il tempo di esecuzione della tua app; questo non ti consente di programmare una specifica sezione di codice, ma include il tempo impiegato per avviare il processo, ecc.
time ./myapp
Modifica: questo è un approccio di base "hack-in-a-quick-timer". Per una vera profilazione delle prestazioni vuoi guardare un profiler adeguato, come suggerito da Larry Watanabe.
Altri suggerimenti
Dipende dal tuo compilatore e sistema operativo. Sulle stazioni di lavoro Sun, utilizzavo "prof" o " gprof " ;. Esiste sicuramente uno strumento di profilazione per il compilatore, il sistema operativo e la macchina: basta google "C profilo tuoOS tuo compilatore" (sostituisci il nome del tuo sistema operativo e del tuo compilatore)
Il metodo di base sta usando la funzione clock (), è qui che abbiamo iniziato tutti.
Esempio:.
clock_t start = clock();
/* Your code */
printf("Time elapsed: %f\n", ((double)clock() - start) / CLOCKS_PER_SEC);
Tuttavia, quando inizi a conoscere sistemi operativi, hardware, programmatori, multi-threading, ecc. Ti sei reso conto che il tempo di esecuzione è qualcosa di molto soggettivo. Quando vuoi misurare le prestazioni (che non significa necessariamente tempi di esecuzione) allora hai bisogno di strumenti più robusti.
Gprof è davvero facile da usare Profiler C, che potrebbe aiutarti a comprendere meglio il concetto di performance.
time ./a.out
corri sopra uno e l'output sarà:
real 0m0.017s
user 0m0.017s
sys 0m0.000s
real
: tempo totale da fine a fine preso dal programma / comando
user
: tempo impiegato in modalità utente.
sys
: tempo impiegato in modalità kernel
Non sono sicuro dei nomi di funzioni specifiche in C, ma una pratica comune è quella di memorizzare un timestamp di microsecondi prima che inizi il corpo, quindi afferrarne un altro alla fine e sottrarre.