Implementing and optimizing a simple graph metric

bearophile bearophileHUGS at lycos.com
Tue Sep 24 15:14:28 PDT 2013


Joseph Rushton Wakeling:

> As an experiment I tried something along these lines -- using 
> uninitializedArray for most of the arrays here and 
> minimallyInitializedArray for p.

minimallyInitializedArray is not stupid, if the specified type 
has no indirections, it's equivalent to using uninitializedArray, 
but it's safer if you later change the type. So in general it's 
not a good idea to use uninitializedArray, unless you have 
special needs. The two functions are not equivalent, one of them 
is for normal performance tuning, and the other is for special 
usages.


> On the other hand, if inside the VertexQueue implementation, I 
> replace the "new" declaration with an uninitializedArray call, 
> the code gets slower by a noticeable amount.
>
> Very odd -- any ideas why that might be?

See above, use uninitializedArray only in special situations and 
when you know what you are doing. Here you do not know what you 
are doing, so use minimallyInitializedArray.

uninitializedArray creates random pointers, and aliases that 
could increase the work done by the GC and cause (temporary if 
you initialized all your data) memory leaks. Try to totally 
disable the GC and time the two versions of the code, with and 
without uninitializedArray. If the GC is the cause of speed 
differences and you disable it, you will see no performance 
difference any more.

Bye,
bearophile


More information about the Digitalmars-d-announce mailing list