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

matheus matheus at gmail.com
Mon Nov 14 21:11:28 UTC 2022


On Monday, 14 November 2022 at 21:07:42 UTC, Adam D Ruppe wrote:
> On Monday, 14 November 2022 at 21:00:38 UTC, matheus wrote:
>> void[] getFoo(){
>>     writeln(cast(int[])bar);
>>     auto foo = getFoo();
>>     writeln(foo);
>>
>> Prints:
>>
>> [1, 0]
>> [2, 0, 0, 0, 0, 0, 0, 0]
>>
>> Looking through godbolt.org the ASM generated with both
>>
>> So why the array generated from getFoo() is 4 times bigger 
>> than the other?
>
> It isn't. You're casting one to int[] and not casting the 
> other, leaving it as void[], which writeln will interpret as 
> just raw bytes.
>
> Since an int is 4x bigger than a byte, casting it to int shows 
> 1/4 the number of ints.
>
> But the actual array is the same.

Oh my, you're absolutely right... I can't believe I missed that.

Thanks Adam,

Matheus.


More information about the Digitalmars-d-learn mailing list