miscellaneous array questions...

IGotD- nise at nise.com
Tue Jul 21 13:16:44 UTC 2020


On Tuesday, 21 July 2020 at 12:34:14 UTC, Adam D. Ruppe wrote:
>
> 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.

If that's the case I would consider this 16MB limit unnecessary. 
Most operating systems put a guard page at the very bottom of the 
stack (which is usually 1MB - 4MB, usually 1MB on Linux). Either 
the array will hit that page during initialization or something 
else during the execution.

Let's say someone puts a 15MB array on the stack, then we will 
have a page fault instead for sure and this artificial limit 
there for nothing. With 64-bits or more and some future crazy 
operating system, it might support large stack sizes like 256MB. 
This is a little like a 640kB limit.


More information about the Digitalmars-d-learn mailing list