スタックの効率的な切り替え

何らかの理由で、私は自分のアプリケーションでいくつかの関数を呼び出すスタックを切り替えます。私はその目的のために makecontext/getcontext/swapcontext を使用します。しかし、私はそれが遅すぎると感じます。 私はスタックポインタと他のレジスタを保存し、次にスタックポインタとしてスタックとして使用したい新しいメモリの値を代入する、その目的のカスタムコードを使用しようとしました。しかし、私はスタックスマッシング検出のエラーを取得し続けています。

いくつかの特別なパーミッションがOSによってスタックに設定されているのでしょうか、それとも何が問題なのですか?どのように問題を回避する。

2
@Basile、提案をありがとう。私はそれを調べます。
追加された 著者 MetallicPriest,
@nos、私もそれについて考えていました。
追加された 著者 MetallicPriest,
意味のある回答を得るには、問題を示す実際のコードを投稿する必要があります
追加された 著者 Paul R,
@ MetallicPriest:あなたはおそらく私に関心のある何かをしているでしょう(そして私はおそらく10年前に同様のことをやったので、助けてくれると信じています)。しかし、本当の助けを得るためには、あなたの全体的な目標を説明する必要があります(私はそれがいくつかの永続性やチェックポイントのメカニズムに関係すると推測しています)、あなたはあなたの現在のソフトウェアをすべて公開ソフトウェアリポジトリ(github ...のような)私は、独自のソフトウェアよりもフリーソフトウェアを手助けする意欲がはるかに高いです....
追加された 著者 Basile Starynkevitch,

2 答え

優れた GNU Pth ライブラリは、これらの手法を大いに活用しています。これは非常によく文書化されており、コンパイル時に最も効率的なコンテキスト切り替えメカニズムを決定します。実際に設定時に編集:

著者の論文: rse-pmt.ps は、ユーザスペースコンテクストの切り替えと関連する問題(代替シグナルスタックなど)に関する技術的な説明を提供します。

3
追加された

あなたは、あなたがしているのと同じ汚い技をやっている他のソフトウェアを見ることができます。特にチキンスキーム。ターゲット jmp_buf で手作業で汚れた後に longjmp を使用することをお勧めします。もちろん、これはポータブルではありません。

しかし、全体の目標をもっと詳しく説明してください。あなたの質問は、一般的にあまりにも神秘的です.... (それはいくつかの人に反発する)

2
追加された