#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10000000
#define M 6
int cnt[N];
int sum = 0;
void func1()
{
sum++;
}
void func2()
{
sum--;
}
clock_t now(void)
{
}
double ms(clock_t t1, clock_t t2)
{
return (t2 - t1) / CLOCKS_PER_SEC;
}
int main(void)
{
void (*func[])(void) = { func1, func2 };
int i, j;
clock_t beg;
for (i = 0; i < N; i++)
cnt[i] = i % 2; // call altenatively
puts("Call 0101010101...."); beg = now();
for (j = 0; j < M; j++)
for (i = 0; i < N; i++)
func[cnt[i]]();
printf("%.3fms\n", ms
(beg
, now
()));
sum = 0;
for (i = 0; i < N; i++)
cnt[i] = (i % 3) ? 1 : 0; // call one in three times
puts("Call 001001001...."); beg = now();
for (j = 0; j < M; j++)
for (i = 0; i < N; i++)
func[cnt[i]]();
printf("%.3fms\n", ms
(beg
, now
()));
sum = 0;
for (i = 0; i < N; i++)
cnt[i] = ((i % 4) == 0 || (i % 4) == 1) ? 1 : 0;
puts("Call 00110011...."); beg = now();
for (j = 0; j < M; j++)
for (i = 0; i < N; i++)
func[cnt[i]]();
printf("%.3fms\n", ms
(beg
, now
()));
sum = 0;
for (i = 0; i < N; i++)
cnt
[i
] = (rand() >> 3) % 2; // call in random
beg = now();
for (j = 0; j < M; j++)
for (i = 0; i < N; i++)
func[cnt[i]]();
printf("%.3fms\n", ms
(beg
, now
()));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KCiNkZWZpbmUgTiAxMDAwMDAwMAojZGVmaW5lIE0gNgoKaW50IGNudFtOXTsKaW50IHN1bSA9IDA7Cgp2b2lkIGZ1bmMxKCkKewogIHN1bSsrOwp9Cgp2b2lkIGZ1bmMyKCkKewogIHN1bS0tOwp9CgpjbG9ja190IG5vdyh2b2lkKQp7CiAgcmV0dXJuIGNsb2NrKCk7Cn0KCmRvdWJsZSBtcyhjbG9ja190IHQxLCBjbG9ja190IHQyKQp7CiAgcmV0dXJuICh0MiAtIHQxKSAvIENMT0NLU19QRVJfU0VDOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgdm9pZCAoKmZ1bmNbXSkodm9pZCkgPSB7IGZ1bmMxLCBmdW5jMiB9OwogIGludCBpLCBqOwogIGNsb2NrX3QgYmVnOwogIAogIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICBjbnRbaV0gPSBpICUgMjsgLy8gY2FsbCBhbHRlbmF0aXZlbHkKCiAgcHV0cygiQ2FsbCAwMTAxMDEwMTAxLi4uLiIpOwogIGJlZyA9IG5vdygpOwogIGZvciAoaiA9IDA7IGogPCBNOyBqKyspCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQogICAgICBmdW5jW2NudFtpXV0oKTsKICBwcmludGYoIiUuM2Ztc1xuIiwgbXMoYmVnLCBub3coKSkpOwoKICBwcmludGYoInN1bSA9ICVkXG4iLCBzdW0pOwogIHN1bSA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICBjbnRbaV0gPSAoaSAlIDMpID8gMSA6IDA7IC8vIGNhbGwgb25lIGluIHRocmVlIHRpbWVzCgogIHB1dHMoIkNhbGwgMDAxMDAxMDAxLi4uLiIpOwogIGJlZyA9IG5vdygpOwogIGZvciAoaiA9IDA7IGogPCBNOyBqKyspCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQogICAgICBmdW5jW2NudFtpXV0oKTsKICBwcmludGYoIiUuM2Ztc1xuIiwgbXMoYmVnLCBub3coKSkpOwoKICBwcmludGYoInN1bSA9ICVkXG4iLCBzdW0pOwogIHN1bSA9IDA7CgogIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICBjbnRbaV0gPSAoKGkgJSA0KSA9PSAwIHx8IChpICUgNCkgPT0gMSkgPyAxIDogMDsKCiAgcHV0cygiQ2FsbCAwMDExMDAxMS4uLi4iKTsKICBiZWcgPSBub3coKTsKICBmb3IgKGogPSAwOyBqIDwgTTsgaisrKQogICAgZm9yIChpID0gMDsgaSA8IE47IGkrKykKICAgICAgZnVuY1tjbnRbaV1dKCk7CiAgcHJpbnRmKCIlLjNmbXNcbiIsIG1zKGJlZywgbm93KCkpKTsKCiAgcHJpbnRmKCJzdW0gPSAlZFxuIiwgc3VtKTsKICBzdW0gPSAwOwoKICBzcmFuZCh0aW1lKE5VTEwpKTsKICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKQogICAgY250W2ldID0gKHJhbmQoKSA+PiAzKSAlIDI7IC8vIGNhbGwgaW4gcmFuZG9tCgogIHB1dHMoIkNhbGwgaW4gUmFuZG9tIik7CiAgYmVnID0gbm93KCk7CiAgZm9yIChqID0gMDsgaiA8IE07IGorKykKICAgIGZvciAoaSA9IDA7IGkgPCBOOyBpKyspCiAgICAgIGZ1bmNbY250W2ldXSgpOwogIHByaW50ZigiJS4zZm1zXG4iLCBtcyhiZWcsIG5vdygpKSk7CgogIHByaW50Zigic3VtID0gJWRcbiIsIHN1bSk7CgogIHJldHVybiAwOwp9Cg==