у нас суспендится текущая корутина, мы должны ее контекст куда-то сохранить. Насколько я понимаю для этого используется куча (если мы про стандартные корутины), отсюда и аллокация на каждую корутину. Однако компиляторы могут эту аллокацию оптимизировать, но вот непонятно при каких условиях и как это происходит, можете пояснить по этому вопросу?
Типичный пример - генераторы: generator g(some, args); for (co_await auto x : g) { std::cerr << x << '\n'; } g не используется за пределами цикла, поэтому компилятор может разместить весь стейт корутины на стеке
http://wg21.link/p0981
Обсуждают сегодня