Tail call elimination

Nick Sabalausky a at a.a
Thu Dec 4 14:54:50 PST 2008


"Christopher Wright" <dhasenan at gmail.com> wrote in message 
news:gh759s$2ucs$1 at digitalmars.com...
> Nick Sabalausky wrote:
>> On a side note, stack overflows are still possible anyway (whether 
>> functional or imperative). Is there a reason (other than inertia) that 
>> stack frames aren't set up like a dynamic array to grow as needed? (Of 
>> course, I can understand not doing that during a debug build to help 
>> detect unintentional infinite recursion) I realize the overhead of 
>> checking the stack size on every function call might be undesirable, but 
>> (not that I've given this much thought) is there no trick to set 
>> something up to automatically trigger when the stack fills up? Or, isn't 
>> it already detecting stack overflow anyway (I know some languages do 
>> that)? (Of course, I'm not saying any of this would be a substitute for 
>> TCE, just a good compliment to it.)
>
> You allocate memory whenever you overflow the currently allocated stack. 
> The caveat is that it has to be contiguous to the existing stack 
> (virtually contiguous, not physically contiguous). In the best case, as 
> soon as you allocate something outside the stack, you've set a limit on 
> the stack size.
>
> On Linux, if your stack exceeds its allowed size, you get SIGSEGV. You can 
> trap this, but you need to specify an alternate stack to do so. On my 
> machine, the default stack limit is 8MB, though you can change that. I 
> assume that setting the limit will alter the ranges that heap memory 
> allocation can deal with, as well.

I see, so a relocatable stack would be required, and I can see how that 
would be a problem. Is it (at least in theory) possible to use paging tricks 
to transparently move the stack to a location with more available space 
(perhaps with the cooperation of both the OS and the GC)? 





More information about the Digitalmars-d mailing list