Tail call elimination
"Jérôme M. Berger"
jeberger at free.fr
Fri Dec 5 10:56:41 PST 2008
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Christopher Wright wrote:
> 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.
Actually, on Linux, the stack for the main thread grows dynamically
until it reaches the allowed size. It is *not* allocated with the
full size at the start. For other threads OTOH, the stack is
allocated once and for all at thread creation.
Jerome
- --
+------------------------- Jerome M. BERGER ---------------------+
| mailto:jeberger at free.fr | ICQ: 238062172 |
| http://jeberger.free.fr/ | Jabber: jeberger at jabber.fr |
+---------------------------------+------------------------------+
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
iEYEARECAAYFAkk5eWgACgkQd0kWM4JG3k+9wQCfVLBCeV38yS/CQVUiuEvSxpoK
V5EAnRPauWLZ0oRbAUWXaGgDd9TIHcs8
=NnEi
-----END PGP SIGNATURE-----
More information about the Digitalmars-d
mailing list