Why am I getting different array size depending where I calling?

matheus matheus at gmail.com
Mon Nov 14 21:00:38 UTC 2022


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 at GOTPCREL]
         mov     esi, 8
         call    _d_newarrayT at 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.


More information about the Digitalmars-d-learn mailing list