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
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.