#include #include #include #include #include #include #include #include #include #include volatile int Z = 0; volatile int Z2 = 0; volatile int C = 0; volatile int C2 = 0; static void handler(int sig) { (void)sig; char buff[] = { (char)('0' + C++ % 10), '\n' }; write(2, buff, 2); for(int i = 1; i < 10000000; i++) { Z2 *= i; } } void loop() { for(int i = 1; i < 10000000; i++) { Z *= i; } char buff[] = { '*', (char)('0' + C2++ % 10), '\n' }; write(2, buff, 3); } int main() { struct sigaction act = {}; act.sa_handler = &handler; sigemptyset(&act.sa_mask); if (sigaction(SIGPROF, &act, 0)) { assert(0); } itimerval t; t.it_value.tv_sec = 0; t.it_value.tv_usec = 100; t.it_interval = t.it_value; if (setitimer(ITIMER_PROF, &t, 0)) { assert(0); } for(int i = 0; i < 2000000; i++) { loop(); } fprintf(stderr, "DONE\n"); return 0; }