2012-04-07 10 views
0

私のアプリケーションの最後に、私は単純に以下を呼び出してクリーンアップします。Visual C++ 2010で配列ポインタを解放するのが遅い

delete [] array1; 
delete [] array2; 
delete [] array3; 
delete [] array4; 
delete [] array5; 
delete [] array6; 
delete [] array7; 
delete [] array8; 
delete [] array9; 
delete [] array10; 
delete [] array11; 
delete [] array12; 
delete [] array13; 

13ヒープ上の配列へのポインタ。デバッグモードで絶対に年齢の ... 3から5分のように、それは実質的に瞬時になるはずです。何がありますか?

更新:私はCスタイルの構造体(つまりプリミティブとポインタのみの構造体)の配列を削除しようとしていましたが、配列のうちの2つにhash_mapsがあり、それは大部分の時間をクリーンアップしていました。

+1

2次元またはギザギザの配列を使用することを検討しましたか? –

+1

これらのアレイはどのようなタイプですか? –

+1

リリースモードではどうなりますか? –

答えて

0

起こっていることがいくつかあります。何度か遅くなっている間にプログラムを停止し、デバッガのスタックに何が入っているのかを確認してください。

要素タイプが配列であるもののデストラクタは、要素ごとに1回呼び出されることに注意してください。

3

配列がデストラクタでオブジェクトを保持する場合、delete []は各デストラクタを呼び出します。

配列が大きい場合は、デストラクタを呼び出す前にオブジェクトを仮想メモリからスワップインする必要があります。

設定に応じて、[]を削除すると配列の境界領域がチェックされ、範囲外の書き込みが行われているかどうかを確認できます。

一般に、デバッグモードでは実行時間を完全に無視する必要がありますが、なぜあなたは配列を解放するのに3〜5分かかりますか?

0

パフォーマンスが懸念される場合は、プロファイラでコードを実行してください。あなたは、プロファイラについて話すことなくパフォーマンスについて話すことができません。

関連する問題