Last I checked, a C++ virtual function call loads the method pointer via an indirect memory load.  Hard for the CPU to speculate through, so typically a pipeline stall.<p>A function pointer that&#x27;s in a local variable, so loaded into a register is a completely different beast, as the measurements bear out.<p>In my measurements, a message-send is ~40% slower than a C++ virtual method call, whereas an IMP-cached function call is ~40% faster, and slightly faster than a regular function call.