The trouble with segmented stacks are:
1. they have a significant runtime penalty
Why?
Extra instructions generated for each function.
Every function? Why?
2. interfacing to C code becomes problematic
Isn't it possible to auto-commit new pages when C code needs
it?
...
There's no way to predict how much stack arbitrary C code will
use.
Presumably one does not call arbitrary C code. Usually one knows
what one might call in advance and can plan accordingly (and even
if it is arbitrary, one at least knows *that* one is going to
call C code and plan accordingly. Most C code doesn't allocate
more than a few megabytes on the stack).