1

A、B、C、D、E の 5 つのプロジェクトを含む C++ Visual Studio ソリューションがあるとします。これらのプロジェクトでは、/STACK リンカー オプションが次のように設定されています。

  • A = 4MB
  • B = 空 (デフォルトで 1MB)
  • C = 空 (デフォルトで 1MB)
  • D = 16MB
  • E = 25MB

それらはすべて、公開された関数を持つ個別の DLL としてビルドされます。計画:

  • A には、foo_b (B から) と foo_c (C から) を呼び出す関数 foo_a が含まれています。
  • B には、foo_d (D から) と foo_e (E から) を呼び出す関数 foo_b が含まれています。

関数 A.foo_a を呼び出すと、スタック サイズはどのくらいになりますか? E.foo_e を直接呼び出しても同じでしょうか?

4

1 に答える 1

1

手動で開始されたスレッド (CreateThread を使用) は、関数呼び出しの引数からカスタム サイズを取得できます。メイン スレッドのスタック サイズは、EXE からの情報に従って設定されます。

5 つの DLL はまったく問題ではありません。
リンカーによってファイル ヘッダーにカスタム サイズを設定できます
が、OS はそれに対して何もしません。

(ランタイム スタック サイズ (Windows の場合) は、ファイルごとではなく、スレッドごとです。)

于 2014-06-11T22:05:09.720 に答える