私はどのようにブーストコルーチンでセグメント化されたスタックを使用できるかの例を教えていただけますか?コルーチンから呼び出されるすべての関数に特殊なsplit-stack
属性を付ける必要がありますか?Boost.Coroutineはセグメント化されたスタックを使用していません
セグメント化されたスタックを使用する必要があるプログラムを作成しようとすると、segfaultsになります。ここで
は は、コードがセグメント化スタックが使用された場合、私はより多くの反復を処理できることを期待する、非常に迅速にセグメンテーションフォールトているようだhttps://wandbox.org/permlink/TltQwGpy4hRoHgDYこれまでのところ、私がやっていることです。 35回の反復後にプログラムのエラーが発生します。
#include <boost/coroutine2/all.hpp>
#include <iostream>
#include <array>
using std::cout;
using std::endl;
class Int {
int a{2};
};
void foo(int num) {
cout << "In iteration " << num << endl;
std::array<Int, 1000> arr;
static_cast<void>(arr);
foo(num + 1);
}
int main() {
using Coroutine_t = boost::coroutines2::coroutine<int>::push_type;
auto coro = Coroutine_t{[&](auto& yield) {
foo(yield.get());
}};
coro(0);
}
ブーストコルーチンでセグメント化されたスタックを使用することのいくつかの面で問題がありますか、それともまだ試みようとしていませんか? – TylerH
@TylerHスタックオーバーフローが発生したときに発生しますが、セグメント化されたスタックを使用する方法がわかりません。ここのドキュメントを読むことからhttps://llvm.org/docs/SegmentedStacks.html機能のように特別な注釈が必要になります。他の人がこれをどのように達成したかの例がほしいと思っています – Curious
私は、 C++に精通していますが、あなたが他の実装を探しているのであれば、恐れがあります。この質問は、主に意見ベースにすぎません(例えば、 "あなたはどうやって?")。特定の問題/デモコードを実装の試行で表示するために質問を言い換えることができれば、直面している問題の解決に役立つ回答を提供する方が簡単です。 – TylerH