miscellaneous array questions...
Adam D. Ruppe
destructionator at gmail.com
Tue Jul 21 12:34:14 UTC 2020
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.
More information about the Digitalmars-d-learn
mailing list