実行時にC ++でヒープの断片化を検出するためのポータブル方法はありますか?

StackOverflow https://stackoverflow.com/questions/1453568

質問

私はQTベースのC ++アプリケーションを書いていると私は、現在のシステムは、実際にメモリ負荷を維持することができるかどうかを確認するために、メモリの断片化を検出できるようにする必要があります。プログラムは、大きな画像を読み込む(15/21メガピクセルでありますノルム)メモリ内の、その後は(W /スパース行列)に対して何らかのフィルタリングを実行します。 例えば、私はWindowsとVMMapでメモリの断片化の問題を抱えていることは、この中で非常に参考にされています:問題は(ワコムタブレット「wintab32.dll」とUltraMonアプリが)ので、アドレス空間を分割している移転されないいくつかのDLLましたプロセスの0x10000000-0x30000000 VAでます。

私は、断片化の問題に向けた意識のいくつかの並べ替えを使用してアプリケーションを提供したいとVMMAPがすでに存在しています。

の情報を与える場合は、クロスプラットフォーム(Linuxでは/ MAC / Win32の)アプローチを疑問に思います
役に立ちましたか?

解決

短い答え:何のポータブルな方法はありません。

長い答え:ヒープが実装され、広くプラットフォーム、STDライブラリ、およびオペレーティング・システム間で異なり、実装の実装の詳細どのように動作されている方法。実装はあなたにそれをフックするためのAPIを提供し、提供 - あなたは、各実装の異なるバージョンを作成する必要があります。 (をどのI考えるのあなたがターゲットと3つのプラットフォームのためのケースでなければなりません。)

他のヒント

私はあなたが過度に悲観的だと思います。 21メガピクセルは、偶数16ビットのカラー深度を想定し、等しいサイズalphachannelは、168メガバイトを取ります。 32ビットシステム上で利用可能なアドレス空間は、ギガバイト単位で測定されます。

これは何が必要だろうか?

bool is_contiguous_freestore_available(size_t max)
{
   char* tst = new(std::nothrow) char[max];
   if (tst == null)
      return false;

   delete[] tst;
   return true;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top