0

やあ!

簡単な質問は、何が問題になる可能性があるかということです。

私のプログラムの全体的なメモリ使用量(タスクマネージャーによって表示される)は、実行中はほぼ常に(40分近く)同じであり、2G近くの空きメモリがあります。

win2003r2で実行されています。

メモリの割り当て/解放は十分に高いです-他のソフトウェアと対話し、そのデータを準備し、古い場合は削除する必要があります。データブロックの数は一定ではありません。

ありがとうございました!

4

2 に答える 2

2

通常、reallocが失敗する理由は2つだけです。

  1. 要求を満たすのに十分な連続メモリがありません
  2. メモリの破損

プログラムには要求を満たすのに十分な全体的なメモリがありますが、断片化のためにそれを行うのに十分な連続したメモリがない場合があります。これを判断する最良の方法は、連続するブロックについてレポートできるツールを使用して、要求を満たすために利用できるブロックがあるかどうかを判断することです。sysinternalsパッケージのツールの1つがそうしていると思います。

于 2010-04-26T16:47:36.493 に答える
1

見るべきコードがないので、私があなたに与えることができるのは回避策だけです。

realloc必要なバイト数を追加するのではなく、拡張する必要がある場合にのみメモリを試して、サイズを2倍にします。これは、断片化に非常に役立ちます。十分なメモリがあると言ったので、終わったときにそれを解放することを心配する必要はありません。十分に合理的である場合は、そのままにしておいてください。

どんな犠牲を払っても断片化を減らすことを目標にしてください。200MBのワーキングセットを維持することは、今日のコンピューティング能力にとっては完全に問題ないように思えます。500 MBを頻繁に超え、プログラムが長期間実行されている場合は、ワーキングセットの最適化をさらに検討することができますが、それまでは心配する必要はありません。

于 2010-04-26T17:07:43.463 に答える