2015-02-14 6 views
3

Сообщается, что вы stack reallocation can happen. Я этого не понимаю. Я думал, что цель setjmp/longjmp состояла в том, чтобы сохранить стек и что он будет действителен, когда longjmp'ing назад. Комментарий, кажется, предполагает, что весь стек может быть перемещен. Это компенсировало бы все указатели, поэтому я понимаю, почему этого следует избегать. Но когда происходит перераспределение стека? Я никогда раньше этого не слышал.Что такое перераспределение стека и когда это происходит?

+0

Обратите внимание, что этот комментарий исходит из исходного кода 'libconcurrency', который реализует сопрограммы, по-видимому, возившись со стеком. – delnan

+0

Это специфичная для библиотеки. Скорее всего, внутреннее ограничение, как запрещающее использование адресов из автоматических переменных во всем мире, станет новым словом в программировании на языке C. –

+0

@delnan Они, вероятно, даже говорят о стеке своей сопрограммы, а не * стек вызовов. – dyp

ответ

1

Кажется, что комментарий о перераспределении стеки относится только к Коро стеку, а не общий C стек

Не будет вообще пройти общий стек C к функции, только реализации самостоятельно следующим образом:

/* 
    * Create a new coroutine from the given function, and with the 
    * given stack. 
    */ 
EXPORT 
extern coro coro_new(_entry fn); 

так, setjmp/longjmp будет столь же безопасным для использования как всегда.