5

質問はそれをすべて言います。リンカー オプションでスタック サイズを増やそうとすると、次のエラーが発生します。

最大スタック サイズは、65536 ~ 16777216 の整数である必要があります。

この 16MB の制限は、Delphi コンパイラの基本的な制限ですか、それとも IDE によって課された恣意的な制限ですか? この値を増やす別の方法はありますか?

注(コメントを見越して...):

  • より大きなスタックが必要なのは、ローカル変数として使用される膨大な静的配列タイプによるものです
  • これを行う必要があるのはひどい設計の兆候であることを理解しています
  • これは大規模なレガシー アプリケーションであり、その設計と保守は私には責任がありません。
  • 動的配列へのリファクタリングは機能しますが、パフォーマンスが 50% 低下します。
  • 他のリファクタリングも可能です - おそらく数週間の作業です。これはおそらくサイドプロジェクトとして終わります。
  • それまでの間、機能が今必要であり、より大きなスタックは簡単に修正できます。
  • はい、私はこれが悪い、悪いことであることを本当に、本当に知っています。
4

2 に答える 2

2

これは Delphi IDE の制限です。$MINSTACKSIZEディレクティブと$MAXSTACKSIZEディレクティブを使用して、より大きな制限を指定できます。IDE の設計者が、コンパイラから実行できることを IDE から実行するのをやめさせることにしたのは奇妙に思えます。

デフォルトのスタック サイズを変更することは危険であることに注意してください。これは、コードによって作成されていないスレッドであっても、プロセス内のすべてのスタックに影響します。そのため、変更を特定のスレッドだけに制限する方が効果的であることがわかる場合があります。これは、スタック サイズをパラメータとして に渡すことで実現できますCreateThread

最後に、スタック サイズを大きくする必要のない、パフォーマンスの高いソリューションがあると確信しています。

于 2014-07-21T12:48:39.130 に答える