Creating fixed array on stack

Andrey saasecondbox at yandex.ru
Sat Jan 12 08:10:47 UTC 2019


On Friday, 11 January 2019 at 15:23:08 UTC, Dgame wrote:
> On Friday, 11 January 2019 at 14:46:36 UTC, Andrey wrote:
>> Hi,
>> In C++ you can create a fixed array on stack:
>>> int count = getCount();
>>> int myarray[count];
>>
>> In D the "count" is part of type and must be known at CT but 
>> in example it is RT.
>> How to do such thing in D? Without using of heap.
>
> You could try alloca:
>
> ----
> import core.stdc.stdlib: alloca;
>
> pragma(inline, true) auto stack(T, alias len)(void* p = 
> alloca(T.sizeof * len)) {
>     return (cast(T*) p)[0 .. len] = T.init;
> }
>
> void main() {
>     import std.stdio: writeln;
>
>     int size = 42;
>     auto a = stack!(int, size);
>     writeln(a);
>     a[] = 2;
>     writeln(a);
> }
> ----

Thank you.
But this requires using of C function "alloca". I think this 
cause some RT overhead (and in output asm code) in comparison 
with C++ variant. Or I'm not right?


More information about the Digitalmars-d-learn mailing list