Сообщается, что вы stack reallocation can happen. Я этого не понимаю. Я думал, что цель setjmp/longjmp состояла в том, чтобы сохранить стек и что он будет действителен, когда longjmp'ing назад. Комментарий, кажется, предполагает, что весь стек может быть перемещен. Это компенсировало бы все указатели, поэтому я понимаю, почему этого следует избегать. Но когда происходит перераспределение стека? Я никогда раньше этого не слышал.Что такое перераспределение стека и когда это происходит?
3
A
ответ
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
будет столь же безопасным для использования как всегда.
Обратите внимание, что этот комментарий исходит из исходного кода 'libconcurrency', который реализует сопрограммы, по-видимому, возившись со стеком. – delnan
Это специфичная для библиотеки. Скорее всего, внутреннее ограничение, как запрещающее использование адресов из автоматических переменных во всем мире, станет новым словом в программировании на языке C. –
@delnan Они, вероятно, даже говорят о стеке своей сопрограммы, а не * стек вызовов. – dyp