1

私が理解しているように、セグメント化されたスタックはコンパイラのサポートで構築されているため、セグメント化されたスタックで実行されている関数が別の関数を呼び出すたびに、スタックにその新しい関数のスタックフレームに十分なスペースがあるかどうかを最初にチェックします。そうでない場合は、別のセグメント化されたスタックがアタッチされ、コードがその関数に分岐します。

しかし、たとえば、ファイバーを実行していて、-fsplit-stackオプションでコンパイルされていない別の共有 (または非共有オブジェクト ファイルにコンパイル) ライブラリから別の関数を呼び出した場合、これは機能しますか? そのライブラリの関数は、セグメント化されたスタックに続行するのに十分なスペースがあるかどうかを確認する必要があることをどのように認識していますか?

clang と gcc の実装 (特にブースト コンテキスト) にのみ関心があります。

4

1 に答える 1