3

私の環境はgcc、C++、Linuxです。私のアプリケーションが何らかのデータ計算を行うとき、データ、計算結果、その他のものを格納するために、「大量の」(数 MB の場合もある) メモリが必要になる場合があります。これを完了するために、一種のnewdeleteを使用していくつかのコードを取得しました。一部の関数スコープ外には所有権がないため、これらすべてのメモリをスタックに割り当てることができると思います。

問題は、デフォルトのスタック サイズ (私のシステムでは 8192Kb) が十分でない可能性があることです。これらのスタック割り当てのスタック サイズを変更する必要がある場合があります。さらに、計算で将来さらに多くのデータが必要な場合は、スタックサイズを再度拡張する必要があるかもしれません。

スタックサイズを拡張するオプションはありますか?特定の機能に割り当てることができないため、アプリ全体にどのように影響しますか? ヒープではなくスタックにデータを割り当てることは本当に改善ですか?

4

3 に答える 3

6

あなたは直接的な答えがない物議を醸す質問を持ち出します。それぞれの側に長所と短所があります。特に:

  1. ヒープ上のメモリの制御はより簡単です。戻り値を確認したり、例外のスローを許可したりできます。スタックがオーバーフローすると、デバッガーが意味のあるものを何も表示しないという適切な変更を加えて、スレッドが単純にアンロードされます。

  2. それどころか、スタックの割り当ては自動的に行われるため、特別なことをする必要はありません。私はいつもこのシンプルさを好みます。

スタックに大量のデータを割り当てることには、根本的な問題はありません。結局のところ、どんな種類の記憶も最終的には記憶になります。これは、必要なメモリの総量が本当に重要であることを意味します。このメモリが割り当てられる場所はそれほど重要ではありません。アプリケーションが動作するのに十分なメモリがある場合、メモリが割り当てられる場所に違いはありません。たとえば、静的にすることができます。

システムが異なれば、割り当てのルールも異なります。これは、最終的な決定が実際のシステムに依存する可能性があることを意味します。

于 2012-07-11T06:34:23.063 に答える
0

Linuxを使用している場合は、ulimitコマンドを使用してスタックサイズを変更できます。ただし、ヒープから割り当てられたメモリも良いと思います。

于 2012-07-13T09:13:29.273 に答える