Struct default constructor - need some kind of solution for C++ interop
Ethan Watson via Digitalmars-d
digitalmars-d at puremagic.com
Thu Sep 8 01:10:07 PDT 2016
On Wednesday, 7 September 2016 at 22:52:04 UTC, Walter Bright
wrote:
> Is:
>
> if (resource != null)
> resource.destroy();
>
> v.s.:
>
> resource.destroy();
>
> so onerous? It's one TST/JNE pair for a value loaded into a
> register anyway.
This one has performance implications for game developers. The
branch predictor in the CPU used for the Xbox One and the PS4
isn't the greatest. If, for example, that destructor gets inlined
and you're iterating over a range of resources and the destroy
method is virtual, there's a good chance you will invoke the
wrath of the dense branch predictor. You don't want to deal with
the dense branch predictor.
http://www.agner.org/optimize/microarchitecture.pdf section 3.13
has a bit more info on the branch predictor. Desktop Intel CPUs
tend to hide performance problems like this thanks to their
far-higher-quality branch predictors. Both chips gain benefits
from sorting to how you expect the branch predictor to work, but
there's a lot of code in a game codebase that isn't that low
level.
More information about the Digitalmars-d
mailing list