前のエントリーで、setjmp/longjmpでの実装を否定していましたが、
VC++の環境では可能なようです。
(エンコードされているのは、glibcのsetjmp/longjmpでした)
おかげで、インラインアセンブラは1命令(スタックポインタの書き換えだけ)で済みました。
というわけで困難に思っていたコルーチンですが、意外と簡単に実装できてしまいました。
しかし、問題発生。
もしかしてSTL使えない?
std::wstringもstd::vectorもstd::mapダメでした。
指定したスタックサイズよりも大きな配列を持つと同じエラーメッセージが出たので、
スタックの大きさが関係しているのでしょうか。
デストラクタを持つクラスをスタック上に生成するとダメみたいです(--;
もう少しテストを繰り返してからライブラリを作ろうと思います。
C++でコルーチン(2)
コメントはまだありません。