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