Ian Lance Taylor wrote: > Joel Sherrill <joel.sherr...@oarcorp.com> writes: > >> Ian Lance Taylor wrote: >>> I've put a project proposal for split stacks on the wiki at >>> http://gcc.gnu.org/wiki/SplitStacks . The idea is to permit the stack >>> of a single thread to be split into discontiguous segments, thus >>> permitting many more threads to be active at one time without worrying >>> about stack overflow or about wasting lots of stack space for inactive >>> threads. The compiler would have to generate code to support detecting >>> when new stack space is needed, and to deal with some of the >>> consequences of moving to a new stack. >>> >>> I would be interested in hearing comments about this. >>> >>> I'm not currently working on this, but I may start working on it at some >>> point. >>> >> How would this work on an embedded system which normally >> has fixed task stacks? >> >> How would you know if a single task had consumed too much >> of its stack space? > > I wasn't really envisioning using it in that way, but, yes, it could do > that. The general goal is for use on systems where there is a lot of > available memory, but there isn't enough memory to support peak stack > usage for all threads.
I've seen a technique work beautifully on ARM which kept a full chain of stack frames. Returning from a call was just LDMEA fp, {fp,sp,pc} which works regardless of whether the frames are are contiguous or not. So, there was little wastage of memory for stacks and not much overhead. Andrew.