Void initialization

Steven Schveighoffer schveiguy at yahoo.com
Mon Dec 19 08:32:24 PST 2011


On Mon, 19 Dec 2011 07:04:20 -0500, Bear <joanyleprince at yahoo.fr> wrote:

> Using D1, I have a program that creates tons of float[] ; for performance
> reasons, I would like them to be uninitialized.
> I've tried replacing
>
> float[] f = new float[x];
> by
> float[] f = cast(float[])std.gc.malloc(x*4);

this is wrong.  a float[] slice is actually a struct, whereas gc.malloc  
returns a pointer.

What you have done is cast a pointer into a pointer+length struct, leaving  
anyones guess as to what the length is set to.  I don't even know why this  
compiles...

A slice is a pointer + length, and you can slice a pointer to "add a  
length" to it.  Follow bearophile's suggestion.

> However
> f[] = float.nan;
> solved the problem, but kinda defeats the purpose of using malloc...
> What am I doing wrong?

If this works, it's not doing what you think :)

-Steve


More information about the Digitalmars-d-learn mailing list