On Monday, 20 July 2020 at 22:05:35 UTC, WhatMeWorry wrote:
How does that pertain to an array?

C arrays work as pointers to the first element and D can use that style too.

2) "The total size of a static array cannot exceed 16Mb" What limits this?

The others aren't wrong about stack size limits playing some role, but the primary reason is that it is a weird hack for @safe, believe it or not.

The idea is:

---
class A {
    ubyte[4_000_000_000] whole_system;
}

@safe void lol() {
    A a;
    a.whole_system[any_address] = whatever;
}
---


With the null `a`, the offset to the static array is just 0 + whatever and the @safe mechanism can't trace that.

So the arbitrary limit was put in place to make it more likely that such a situation will hit a protected page and segfault instead of carrying on. (most low addresses are not actually allocated by the OS... though there's no reason why they couldn't, it just usually doesn't, so that 16 MB limit makes the odds of something like this actually happening a lot lower)

I don't recall exactly when this was discussed but it came up in the earlier days of @safe, I'm pretty sure it worked before then.

Reply via email to