Of possible interest: fast UTF8 validation
xenon325
anm at programmer.net
Wed May 16 17:32:03 UTC 2018
On Wednesday, 16 May 2018 at 16:54:19 UTC, Walter Bright wrote:
> I used to do things like that a simpler way. 3 functions would
> be created:
>
> void FeatureInHardware();
> void EmulateFeature();
> void Select();
> void function() doIt = &Select;
>
> I.e. the first time doIt is called, it calls the Select
> function which then resets doIt to either FeatureInHardware()
> or EmulateFeature().
>
> It costs an indirect call [...]
Is this basically the same as Function MultiVersioning [1] ?
I never had a need to use it and always wondered how does it work
out it real life.
From description it seems this would incur indirection:
"To keep the cost of dispatching low, the IFUNC [2] mechanism is
used for dispatching. This makes the call to the dispatcher a
one-time thing during startup and a call to a function version is
a single jump indirect instruction."
In linked article [2] Ian Lance Taylor says glibc uses this for
memcpy(), so this should be pretty efficient (but than again, one
doesn't call memcpy() in hot loops too often)
[1] https://gcc.gnu.org/wiki/FunctionMultiVersioning
[2] https://www.airs.com/blog/archives/403
--
Alexander
More information about the Digitalmars-d
mailing list