#include #include #define NumberOfIterations 60000 void RunCollapsed() { int i, j; for (i = 0; i < NumberOfIterations; i++) { for (j = 0; j < NumberOfIterations; j++) { } } } static void Helper() { int j; for (j = 0; j < NumberOfIterations; j++) { } } void RunNonCollapsed() { int i; for (i = 0; i < NumberOfIterations; i++) { Helper(); } } void RunOnce(LARGE_INTEGER *collapsedTicks, LARGE_INTEGER *nonCollapsedTicks) { LARGE_INTEGER start; LARGE_INTEGER stop; QueryPerformanceCounter(&start); RunCollapsed(); QueryPerformanceCounter(&stop); collapsedTicks->QuadPart = stop.QuadPart - start.QuadPart; printf("Collapsed: %lu ticks\n", collapsedTicks->QuadPart); QueryPerformanceCounter(&start); RunNonCollapsed(); QueryPerformanceCounter(&stop); nonCollapsedTicks->QuadPart = stop.QuadPart - start.QuadPart; printf("NonCollapsed: %lu ticks\n", nonCollapsedTicks->QuadPart); printf("%d%%\n", (nonCollapsedTicks->QuadPart * 100) / collapsedTicks->QuadPart); } int main() { LARGE_INTEGER collapsedTicks; LARGE_INTEGER nonCollapsedTicks; LARGE_INTEGER totalCollapsedTicks; LARGE_INTEGER totalNonCollapsedTicks; int i; totalCollapsedTicks.QuadPart = 0; totalNonCollapsedTicks.QuadPart = 0; for (i = 0; i < 10; i++) { RunOnce(&collapsedTicks, &nonCollapsedTicks); totalCollapsedTicks.QuadPart += collapsedTicks.QuadPart; totalNonCollapsedTicks.QuadPart += nonCollapsedTicks.QuadPart; } printf("Average: %d%%\n", (totalNonCollapsedTicks.QuadPart * 100) / totalCollapsedTicks.QuadPart); }