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