On Thursday, 9 July 2020 at 17:15:26 UTC, Jonathan M Davis wrote:
On Thursday, July 9, 2020 10:21:41 AM MDT H. S. Teoh via
Digitalmars-d-learn wrote:
> - Assignment copies the whole array, as in int[5] a; auto b
> = a;
Sometimes this is desirable. Consider the 3D game example.
Suppose you're given a vector and need to perform some
computation on it. If it were a dynamic array, you'd need to
allocate a new array on the heap in order to work on it
without changing the original vector. With a static array,
it's passed by value to your function, so you just do what you
need to do with it, and when you're done, either discard it
(== no work because it's allocated on the stack) or return it
(== return on the stack, no allocations).
I recall that at one point, I wrote brute-force sudoku solver,
and initially, I'd used dynamic arrays to represent the board.
When I switched them to static arrays, it was _way_ faster -
presumably, because all of those heap allocations were gone.
And of course, since the sudoku board is always the same size,
the ability to resize the array was unnecessary.
In most programs that I've written, it hasn't made sense to use
static arrays anywhere, but sometimes, they're exactly what you
need.
- Jonathan M Davis
Even though dynamic arrays can be resized, they don't need to be
if the need doesn't arise - did you measure performance with
pre-allocated dynamic arrays and disabled bounds checks, too ?
I wouldn't expect that big of a performance difference in that
scenario, but what you expect and what you get can be vastly
different. I'm really curious to know.