3

数千行のコード、いくつかのクラス、関数などで構成される長いC ++プログラムがあります。このプログラムは基本的に、入力ファイルから情報を読み取り、アルゴリズムを実行し、結果を出力ファイルに書き込みます。

今日、私はプログラムの実行時間が時々劇的に変化することに気づきました。そこで、コンピューターを再起動し、可能な限りすべてを閉じて、同じ入力ファイルを使用してコードを5回続けて実行することにより、小さなテストを行います。実行時間はそれぞれ50、80、130、180、190秒です。

この状況での私の最初の推測は、削除されていない動的な記憶です。しかし、私はコード全体で動的配列を2回だけ使用しており、それらの配列を削除すると確信しています。

これについて何か説明はありますか?Windows7コンピューターでVisualStudio2010を使用しています。

4

2 に答える 2

3

この場合、LFH(低フラグメンテーションヒープ)メモリアロケータが無効になっているため、VisualStudioデバッガー内からプログラムを実行することに注意してください。VSの外部からソフトウェアを試してください。

Visual Studio内から実行するだけで、タスクが完了するまでに数秒かかり、通常は完了するまでに数時間かかる場合があります。

とりわけ、分割統治法で何が起こっているのかまだわからない場合。アプリをインストルメント化してサブシステムのランタイムを確認するか、さまざまな領域にデバッグタイマーを配置して、実行時間が大幅に変化している場所を確認し、そこからドリルダウンします。これがメモリアロケータの問題である場合、通常、アレイを解放しているときに大きなランタイムが表示されます。

于 2013-01-31T03:08:15.847 に答える
2

コードは、オペレーティングシステム、ディスク、ネットワーク、時間、メモリ、起動された他のプロセスなどの状態を含む環境で実行されます。

同じ環境で同じコードを実行すると、毎回同じ結果が得られます。

これで、さまざまな結果(実行時間)が得られます。同じ実行可能ファイルを繰り返し実行している場合は、周囲の環境で何かが変化しています。

さて、最も明白な質問は次のとおりです:あなたのコードは外部環境に変化を引き起こしていますか?簡単な例は次のとおりです。ファイルを読み込み、データを変更して、同じファイルに書き戻します。

あなたはあなたのコードを知っています。このアプローチを使用して、コードが環境に与える可能性のある影響を分離するだけで、理由がわかります。

于 2013-01-31T03:50:14.570 に答える