6

Qt ベースの C++ アプリケーションを作成していますが、現在のシステムが実際にメモリ負荷を維持できるかどうかを確認するために、メモリの断片化を検出できる必要があります。プログラムは大きな画像を読み込みます (15/21 メガピクセルが標準です)。メモリ内でフィルタリングを実行します(疎行列を使用)。たとえば、私は Windows でメモリの断片化の問題を抱えており、VMMap はこれに非常に役立ちました。問題は、一部の DLL (Wacom タブレットの「wintab32.dll」と UltraMon アプリ) が再配置されず、アドレス空間が分割されていることでした。プロセスの 0x10000000-0x30000000 VA で。

断片化の問題に対するある種の認識をアプリケーションに提供し、VMMAP が提供する情報を提供するクロスプラットフォーム (linux/mac/win32) アプローチが既に存在するかどうか疑問に思います。

4

3 に答える 3

3

簡単な答え: 移植可能な方法はありません。

より長い答え: ヒープがどのように実装され、どのように機能するかは、プラットフォーム、標準ライブラリ、およびオペレーティング システム間で大きく異なる実装の実装の詳細です。実装ごとに異なるバージョンを作成する必要があります。ただし、実装によって、それにフックするための API が提供されます。(これは、ターゲットとする 3 つのプラットフォームの場合に当てはまると思います。)

于 2009-09-21T09:30:29.553 に答える
0

あなたは悲観的すぎると思います。21 メガピクセル、16 ビットの色深度と同じサイズのアルファチャンネルを想定しても、わずか 168 MB しか必要としません。32 ビット システムで使用可能なアドレス空間は、ギガバイト単位で測定されます。

于 2009-09-21T10:39:08.083 に答える
-1

これはあなたが必要とすることをしますか?

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

   delete[] tst;
   return true;
}
于 2009-09-22T21:34:45.923 に答える