相关疑难解决方法(0)

无栈C ++ 20协程是否有问题?

基于以下内容,C ++ 20中的协程看起来像是无堆栈的。

https://en.cppreference.com/w/cpp/language/coroutines

我担心的原因有很多:

  1. 在嵌入式系统上,堆分配通常是不可接受的。
  2. 在低级代码中,co_await的嵌套很有用(我不相信无栈协程允许这样做)。

使用无堆栈协程时,只有顶层例程可以被挂起。该顶级例程调用的任何例程本身都不会暂停。这禁止在通用库中的例程中提供挂起/恢复操作。

https://www.boost.org/doc/libs/1_57_0/libs/coroutine/doc/html/coroutine/intro.html#coroutine.intro.stackfulness

  1. 由于需要自定义分配器和内存池,因此代码更加详细。

  2. 如果任务等待操作系统为它分配一些内存(没有内存池),则速度较慢。

鉴于这些原因,我真的希望我对当前的协程是错误的。

问题分为三个部分:

  1. 为什么C ++选择使用无堆栈协程?
  2. 关于在无堆栈协程中保存状态的分配。我可以使用alloca()避免通常用于协程创建的任何堆分配。

协程状态是通过非数组运算符new在堆上分配的。 https://en.cppreference.com/w/cpp/language/coroutines

  1. 我对C ++协程的假设是错误的,为什么?

编辑:

我现在正在为协程进行cppcon讨论,如果我对自己的问题有任何答案,我将其发布(到目前为止没有任何内容)。

CppCon 2014:Gor Nishanov“等待2.0:无堆栈可恢复函数”

https://www.youtube.com/watch?v=KUhSjfSbINE

CppCon 2016:James McNellis“ C ++协程简介”

https://www.youtube.com/watch?v=ZTqHjjm86Bw

c++ asynchronous c++20 c++-coroutine

56
推荐指数
3
解决办法
5069
查看次数

标签 统计

asynchronous ×1

c++ ×1

c++-coroutine ×1

c++20 ×1