u/AdMotor4869

Virtual dispatch isn't always the slowest, and std::variant isn't always the fastest
▲ 62 r/cpp

Virtual dispatch isn't always the slowest, and std::variant isn't always the fastest

I've been looking at how OpenJDK's GC barrier system picks its implementation at runtime using templates instead of virtual dispatch. The trick is lazy resolution: you pay once at first use instead of a vtable lookup on every call.

That got me curious enough to benchmark it against three other approaches: virtual functions, function pointers, and std::variant + std::visit. I was surprised to see std::variant being the slowest on libstdc++ while virtual dispatch beat it comfortably.

Please refer to the blog for my full analysis. Would love to hear what you think!

Edit: Benchmarks are on GCC 11 (Ubuntu 22.04 default). GCC 12+ significantly improves std::visit. Full compiler version comparison in the next post.

shubhankar-gambhir.github.io
u/AdMotor4869 — 14 hours ago