利用RDTSC指令,或QueryPerformanceCounter/QueryPerformanceFrequency,高精度计算执行时间。 // timestamp.h #ifndef TIME_STAMP_H_ #define TIME_STAMP_H_ #define RDTSC _asm _emit 0x0f _asm _emit 0x31 #pragma warning (push) #pragma warning (disable: 4035) inline unsigned __int64 timestamp() { __asm RDTSC } #pragma warning (pop) #include <windows.h> __int64 tickfrequency() { LARGE_INTEGER frequency; if (QueryPerformanceFrequency(&frequency)) { return frequency.QuadPart; } return 0; } __int64 tickcount() { LARGE_INTEGER lasttime; if (QueryPerformanceCounter(&lasttime)) { return lasttime.QuadPart; } return 0; } #endif // TIME_STAMP_H_ // main.cc #include <stdio.h> #include "timestamp.h" void test(float num) { int j = 0; for (float i = 0.f; i < num; i += 1.f) { j = (int)(i / (i + 5)); } } int main() { printf("tickfrequency %I64d/n========================/n", tickfrequency()); for (int k = 0; k < 3; k++) { printf("=========time %d=========/n", k); __int64 t = timestamp(); test(100000000.f); printf("timestamp %I64d/n", timestamp() - t); t = tickcount(); test(100000000.f); printf("tickcount %I64d/n", tickcount() - t); } getc(stdin); return 0; }