On Friday, 10 July 2020 at 10:47:49 UTC, psycha0s wrote:
On Friday, 10 July 2020 at 10:13:23 UTC, wjoe wrote:
However stack memory needs to be allocated at program start. I
don't see a huge benefit in allocation speed vs. heap
pre-allocation, or is there?
I mean 1 allocation vs 2 isn't going to noticeably improve
overall performance.
Allocation on the stack is basically just a single processor
instruction that moves the stack pointer (well, ofc you also
need to initialize array elements). Meanwhile, allocation on
the heap involves much more complex logic of the memory
allocator. Moreover, in D dynamic arrays use GC, thus the
memory allocation may involve the trash collection step.
On Friday, 10 July 2020 at 11:20:17 UTC, Simen Kjærås wrote:
You seem to still be thinking of static arrays as the same kind
of "thing" as a dynamic array. They're (usually) more like ints
or structs than containers: they're generally small, they're
often parts of other structures or classes, and they're fairly
often the element type of a larger dynamic array. For instance,
a bitmap image could be a byte[4][][], with dynamic dimensions
3840x2160. If instead of byte[4] we used byte[], not only would
things grind to a halt immediately, we'd also be using
massively more memory.
No, not quite. My idea of the stack is like a pre-allocated
amount of memory in computer RAM which is pointed to by the stack
pointer.
And further that at program start,whn the process is created,
this memory needs to be allocated by the OS, just like any other
memory allocation in protected mode, but only once for the entire
run time of the process.
(And since there is an allocation when a process/thread is
created, the act of creating a thread is considered slow.)
A static array resides in this memory (with a fixed length, so a
length needn't be stored because bounds can be checked at compile
time) if declared as a variable and is accessed via stack pointer
and offset.
As for dynamic arrays, that's an allocated amount
(length/capacity) of memory in computer RAM which is not part of
the stack (the heap).
Whichever creation process is chosen (malloc, GC, Pool that
doesn't allocate but just returns a pointer/length, etc.) you end
up with a pointer to the allocated memory in computer RAM and a
length variable.
But when the static array is part of a data structure which
itself is stored in a dynamic array, this memory is accessed
through the pointer of the dynamic array.
Is that not correct ?
Thanks for the answers :)