Related articles |
---|
[3 earlier articles] |
Re: Proper Tail Recursive C++ will@ccs.neu.edu (William D Clinger) (1997-02-23) |
Re: Proper Tail Recursive C++ fjh@mundook.cs.mu.OZ.AU (1997-02-23) |
Re: Proper Tail Recursive C++ bothner@cygnus.com (1997-02-23) |
Re: Proper Tail Recursive C++ andy@wonderworks.co.uk (Andy Armstrong) (1997-02-27) |
Re: Proper Tail Recursive C++ gary@wheel.tiac.net (1997-03-01) |
Re: Proper Tail Recursive C++ Wilco.Dijkstra@armltd.co.uk (Wilco Dijkstra) (1997-03-01) |
Re: Proper Tail Recursive C++ hbaker@netcom.com (1997-03-05) |
Re: Proper Tail Recursive C++ njl@cyberpass.net (1997-03-09) |
Re: Proper Tail Recursive C++ hbaker@netcom.com (1997-03-13) |
Re: Proper Tail Recursive C++ fjh@murlibobo.cs.mu.OZ.AU (1997-03-13) |
Re: Proper Tail Recursive C++ ramsdell@linus.mitre.org (1997-03-16) |
Re: Proper Tail Recursive C++ danwang@atomic.CS.Princeton.EDU (1997-03-18) |
Re: Proper Tail Recursive C++ njl@cyberpass.net (1997-03-21) |
[1 later articles] |
From: | hbaker@netcom.com (Henry Baker) |
Newsgroups: | comp.compilers |
Date: | 5 Mar 1997 13:45:20 -0500 |
Organization: | Compilers Central |
References: | 97-02-111 97-02-131 97-02-141 97-03-010 |
Keywords: | storage, C++, optimize |
wdijkstr@armltd.co.uk wrote:
> In order to be able to generate a tail-recursive call to f, a C/C++
> compiler needs to know the following:
>
> A It is OK to access data *below* the current stack frame. In other
> words, the stack is not used by interrupts, exception handlers, etc.
>
> B The function which is called, nor its decendants do use the stack in
> a way which may overwrite the live parts of the array. Or, simply,
> the function which is called must be a simple leaf function (doesn't
> use stack).
>
> For many runtime systems A can never hold, and B is simple too hard to
> check at compile time (except for the case that g was before f in the
> source).
On some run-time systems it may be possible to 'redefine' the topmost
stack frame to be bigger on each 'tail-call'. Thus, you may be able
to achieve 'tail-calling' even though the tail call allocates live
storage. I would imagine that such a system would require both a
'stack' and a 'frame' pointer to work correctly.
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.