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?