.sizeof dynamically allocated array

Meta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 11 13:13:47 PDT 2015


On Thursday, 11 June 2015 at 20:09:38 UTC, Adel Mamin wrote:
> import std.stdio;
>
> void main()
> {
>     ubyte[] a1 = new ubyte[65];
>     ubyte[65] a2;
>
>     writeln("a1.sizeof = ", a1.sizeof); // prints 16
>     writeln("a2.sizeof = ", a2.sizeof); // prints 65
> }
>
> Why a1.sizeof is 16?

ubyte[] is a slice, which is actually a struct. It's more or less 
the same as:

struct Slice(T)
{
     T* ptr;
     size_t length;
}

So sizeof returns the size of the struct, not the size of the 
data that its ptr member points to.

ubyte[65] is a static array, which is just a big block of data on 
the stack. That's why it returns the expected value for sizeof. 
To create a slice of a static array, use the slice operator:

writeln(sizeof(a2[])); //Prints 16


More information about the Digitalmars-d-learn mailing list