Коротиниспользует внутренний контекст, который управляет набором регистров и стопкой. Память, используемая стеком, выделяется/распределяется черезСтек-распорядитель, что необходимо для моделированияСтек-распорядитель.
стек-распорядительдолжен удовлетворятьконцепции стека-распорядителятребованиям, показанным в следующей таблице, в которойявляется объектом типастек-распорядителя,sctxявляетсястек_контекст, аразмерявляетсяstd::размер_t:
выражение
Тип возврата
примечания
aвыделитьsctx,размер
пустота
создает стек размером не менеебайтов и сохраняет его указатель и длину вsctx
a.deallocatesctx
пустота
распределяет стек, созданныйa.выделяют
Important
Реализациявыделения()может включать в себя логику для защиты от превышения доступного размера стека контекста, а не оставлять его как неопределенное поведение.
Important
Звонокdeallocate()сstack_context, не установленный, выделяют(), приводит к неопределенному поведению.
Note
Стек не требуется выравнивать; выравнивание происходит внутрикорутина.
Note
В зависимости от архитектурывыделяют()хранит адрес с верхней части стека (растущий вниз) или нижней части стека (растущий вверх).
Классstack_allocatorпредставляет собой типдефstandard_stack_allocator.
Статья Stack allocation раздела Chapter 1. Coroutine Chapter 1. Coroutine может быть полезна для разработчиков на c++ и boost.