1. ホーム
  2. c++

C++でコルーチンを実装する方法

2023-12-18 14:01:58

質問

移植可能かどうか疑問ですが、何か解決策はないでしょうか。 代替スタックを作成し、関数エントリでSP,BP,IPをリセットし、イールドがIPを保存してSP+BPを復元することで可能だと思います。 デストラクタと例外安全性はトリッキーに見えますが、解決可能です。

それは行われましたか? それは不可能ですか?

どのように解決するのですか?

はい、そうです。 することができます 問題なくできます。必要なのは、呼び出しスタックをヒープ上の新しく割り当てられたスタックに移動するための、ちょっとしたアセンブラコードだけです。

私なら を見ます。 boost::coroutine ライブラリ .

気をつけなければならないのは、スタックオーバーフローです。ほとんどのオペレーティング システムでは、スタックをオーバーフローさせると、仮想メモリ ページがマッピングされないため、セグメンテーション フォールトが発生します。しかし、ヒープ上にスタックを割り当てた場合、何の保証も得られません。 このことを覚えておいてください。