How to pass static array to function not by value?

drug via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Nov 22 07:57:44 PST 2014


On 22.11.2014 20:47, ketmar via Digitalmars-d-learn wrote:
> On Sat, 22 Nov 2014 19:07:14 +0400
> drug via Digitalmars-d-learn<digitalmars-d-learn at puremagic.com>  wrote:
>
>> Sorry for inconvenience.
>> http://dpaste.dzfl.pl/64ab69ae80d2
>> this causes stackoverflow because static array is big enough. I'd like
>> to pass it not by value to avoid stack overflowing. Even if I use ref
>> dmd pass it by value.
> ah, that's why we need to look at the code! ;-)
>
> what you have here is multidimensional static array, so 'ref' is not
> working as you expected. let's just say that you can't do this with
> 'ref' and static arrays, 'cause compiler will copy some of the data
> anyway.
>
> multidimensional static array is just a continuous region of memory, not
> a pointer to regions, as dynamic arrays. so compiler can't make
> reference to `[A][B]` (for now, at least). either use dynamic arrays as
> Ali suggested, or do all the pointer math manually (i.e. pass&arr[0]0]
> and all dimensions).
>
> it's a bad practice to have such big arrays on the stack anyway.
I didn't understand why ref didn't work. Now it's clear. Thank you.


More information about the Digitalmars-d-learn mailing list