4 ms·
And, some actual timings (code: https://godbolt.org/z/qnWEqs446 https://godbolt.org/z/qnWEqs446): $ clang -DLEN=1024 -DITERATIONS=100000 -O3 switch.c && ./
by dzaima 4y ago
And, some actual timings (code: https://godbolt.org/z/qnWEqs446 https://godbolt.org/z/qnWEqs446):
$ clang -DLEN=1024 -DITERATIONS=100000 -O3 switch.c && ./a.out
predictable:
call_table: 173.1ms
switch_cases: 59.6ms
random:
call_table: 536.2ms
switch_cases: 450.4ms
$ gcc -DLEN=1024 -DITERATIONS=100000 -O3 -fcf-protection=none switch.c && ./a.out
predictable:
call_table: 174.5ms
switch_cases: 114.7ms
random:
call_table: 581.8ms
switch_cases: 108.8ms
$ clang -DLEN=64 -DITERATIONS=2000000 -O3 switch.c && ./a.out
predictable:
call_table: 230.6ms
switch_cases: 116.0ms
random:
call_table: 218.7ms
switch_cases: 158.2ms
$ gcc -DLEN=64 -DITERATIONS=2000000 -O3 -fcf-protection=none switch.c && ./a.out
predictable:
call_table: 872.7ms
switch_cases: 146.3ms
random:
call_table: 740.4ms
switch_cases: 132.2ms
The switch is faster in all cases, often by a big margin.