Most discussions I was able to find online about functions with variable number of arguments in C and C++ focus on syntax and type safety. Perhaps it has to do with C++11 support of such functions. But how much are they actually slower?

I wrote a small test to find out:

https://github.com/kostja/snippets/blob/master/stdarg.c

kostja@olah ~/snippets % gcc -std=c99 -O3 stdarg.c; time ./a.out 
./a.out  0.18s user 0.00s system 99% cpu 0.181 total
kostja@olah ~/snippets % vim stdarg.c 
kostja@olah ~/snippets % gcc -std=c99 -O3 stdarg.c; time ./a.out
./a.out  0.31s user 0.00s system 98% cpu 0.320 total

64-bit ABI allows passing some function arguments in C via registers. Apparently this is not the case for functions with variable number of arguments. I don’t know for sure how many registers can be used, but the speed difference between standard and variadic function call increases when increasing the number of arguments.