Hi all,

Well my doubt is pretty much the title for the snippet below:

import std.stdio;

void[] getFoo(){
   void[] _ = new void[int.sizeof*2];
   (cast(int[])_)[0] = 2;
   return _;
}

void main() {
    void[] bar = new void[int.sizeof*2];
    (cast(int[])bar)[0] = 1;
    writeln(cast(int[])bar);
    auto foo = getFoo();
    writeln(foo);
    return;
}

Prints:

[1, 0]
[2, 0, 0, 0, 0, 0, 0, 0]

Looking through godbolt.org the ASM generated with both

    void[] bar = new void[int.sizeof*2];

or

    void[] _ = new void[int.sizeof*2];


is the same:

        mov     rdi, qword ptr [rip + TypeInfo_Av.__init@GOTPCREL]
        mov     esi, 8
        call    _d_newarrayT@PLT
        mov     qword ptr [rbp - 16], 8
        mov     qword ptr [rbp - 8], rdx


So why the array generated from getFoo() is 4 times bigger than the other?

Thanks in advance,

Matheus.

Reply via email to