Te recomendamos que pruebes esta solución en un ambiente controlado antes de enviarlo a producción, saludos.
Solución:
Sí, es probable que este programa haya usado menos de una milésima de segundo. Intente usar una resolución de microsegundos con timeval
.
p.ej:
#include
struct timeval stop, start;
gettimeofday(&start, NULL);
//do stuff
gettimeofday(&stop, NULL);
printf("took %lu usn", (stop.tv_sec - start.tv_sec) * 1000000 + stop.tv_usec - start.tv_usec);
A continuación, puede consultar la diferencia (en microsegundos) entre stop.tv_usec - start.tv_usec
. Tenga en cuenta que esto solo funcionará para tiempos de subsegundos (como tv_usec
hará un bucle). Para el caso general utilice una combinación de tv_sec
y tv_usec
.
Editar 2016-08-19
Un enfoque más apropiado en el sistema con clock_gettime
el apoyo seria:
struct timespec start, end;
clock_gettime(CLOCK_MONOTONIC_RAW, &start);
//do stuff
clock_gettime(CLOCK_MONOTONIC_RAW, &end);
uint64_t delta_us = (end.tv_sec - start.tv_sec) * 1000000 + (end.tv_nsec - start.tv_nsec) / 1000;
Este fragmento de código se puede utilizar para mostrar el tiempo en segundos, milisegundos y microsegundos:
#include
struct timeval start, stop;
double secs = 0;
gettimeofday(&start, NULL);
// Do stuff here
gettimeofday(&stop, NULL);
secs = (double)(stop.tv_usec - start.tv_usec) / 1000000 + (double)(stop.tv_sec - start.tv_sec);
printf("time taken %fn",secs);
Un par de cosas pueden afectar los resultados que está viendo:
- estas tratando
clock_t
como un tipo de punto flotante, no creo que lo sea. - Usted podría estar esperando (
1^4
) para hacer algo más que calcular el XOR bit a bit de 1 y 4., es decir, es 5. - Dado que el XOR es de constantes, es probable que el compilador lo doble, lo que significa que no agrega mucho trabajo en tiempo de ejecución.
- Dado que la salida está almacenada en búfer (solo está formateando el string y escribirlo en la memoria), se completa muy rápidamente.
No está especificando qué tan rápido es su máquina, pero no es descabellado que esto se ejecute muy rápido en hardware moderno, no.
Si lo tiene, intente agregar una llamada a sleep()
entre las instantáneas de inicio/detención. Tenga en cuenta que sleep()
es POSIX, sin embargo, no estándar C.
Si estás contento con lo expuesto, eres capaz de dejar un tutorial acerca de qué le añadirías a esta división.