runtime static arrays
Ali Çehreli
acehreli at yahoo.com
Tue Nov 20 10:58:10 PST 2012
On 11/20/2012 06:25 AM, Namespace wrote:
> Is there any need for 'smart' or 'compressed' arrays?
>
> In my last projects I had some situations where I need an array, but
> only for one scope. But I could not use static arrays, because I didn't
> know the size at compile time. So I used 'alloca'. But 'alloca' has a
> terrible interface and in some few cases I had to append x elements. So
> I used a dynamic array. But dynamic arrays live longer as the lifetime
> of the scope. Furthermore dynamic arrays costs more memory as I needed,
> because the capacity of them is n * 2 + 1, but in my cases I need only n.
> So what I need was an array, which lives only for one scope (freed
> memory after leaving scope) and which hasn't more elements/capacity as I
> need.
>
> Am I wrong and dynamic arrays are the solution? Or is there need for
> such 'compressed' arrays?
> Another solution would be to improve the interface of alloca, but it
> would be still not resizable.
The following program makes a slice from GC-allocated memory (or a
fixed-size array as in the comment). The important part is 'buffer[0..10]'.
import std.stdio;
import core.memory;
void bar(int[] a) // Also try: int[10] a
{
writeln("param : ", a.ptr);
}
void foo()
{
int *buffer = cast(int*)GC.calloc(int.sizeof * 10);
scope (exit) GC.free(buffer);
writeln("buffer: ", buffer);
int[] a = buffer[0..10]; // Also try: int[10] a =
writeln("a : ", a.ptr);
foreach (i; a) {
i = 42 + i;
}
bar(a);
}
void main()
{
foo();
}
Ali
More information about the Digitalmars-d-learn
mailing list