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.

Reply via email to