SEH を損なうことなく、Win32 の「1 つの大きなスタック」モデルから逃れる方法はありますか? コルーチンを実装する方法として、スタック フレームをヒープに割り当てられるようにしたいと考えています。ただし、私のコードは現在 SEH に依存しており、数ページ下のこの記事には、次のように記載されています (例外ハンドラーのトラバーサル、スキャン、強調鉱山に関連):
OS は、このチェーン トラバーサル中のスタックの破損に対してかなり偏執的です。すべてのチェーン エントリがスタックの境界内にあることを確認します。(これらの境界は TEB にも記録されます)。OS は、すべてのエントリがスタック上で昇順であることも確認します。これらの規則に違反すると、OS はスタックが破損していると見なし、例外を処理できなくなります。これは、Win32 アプリケーションが、スタック オーバーフローを処理するための革新的な手法としてスタックを複数のばらばらなセグメントに分割できない理由の 1 つです。
したがって、基本的に、現在のスタック フレームが「1 つの大きなスタック」の外にあるときに例外が発生すると、プロセスは即座に終了します。理想的な行動ではありません。
この問題を回避し、ネイティブの Win32 アプリでばらばらのスタックを使用して SEH を利用できた人はいますか? また、他の Win32 固有の「落とし穴」でスタックがばらばらになっているものはありますか?