-4

1つのピースに2GBを超えるメモリを割り当てる必要があります。

  1. 2GBの制限があるため、アレイを使用できません
  2. 2GB以上を割り当てることができる.netFramework4.5を使用している場合でも、配列オブジェクトを使用したくありません
  3. のようなものが必要ですがGlobalHAlloc、このメソッドには32ビットサイズのパラメーターしかありません

Windows APIなどを使用する必要がありますか?私はこれを行うのが難しいことを知っています、そして私はこれを行うスキルを持っていないので私はたくさんのメモリをリークすることを知っています...

しかしGlobalHAlloc、.NET Framework 4.5のように、メモリを簡単に割り当てる方法はありますか?MemoryBlock配列クラスが好きではないので、自分のクラスをやりたいです。

4

1 に答える 1

6

いくつかの方法を使用して、より大きなメモリブロックを取得できます。

  • AllocHGlobal実際IntPtrには、64ビットで64ビットサイズの値を取ります。
  • ネイティブ関数を呼び出しますHeapAlloc。ここでも、ポインターサイズのパラメーターを取ります。
  • CoTaskMemAlloc functionポインタサイズのパラメータも受け取るネイティブ関数を呼び出します。

AllocHGlobal32ビットパラメータのみを取ると述べているので、プロセスは32ビットであるように見えます。そしてそれが本当の問題です。32ビットプロセスでは、4GB(合計)を超えて割り当てることはできません。そして、その制限はポインタのサイズによって課せられます。さらなる制限として、32ビットOSでは、プロセスは2GB(合計)を超えて割り当てることはできません。

したがって、問題を解決するには、64ビットプロセスに切り替える必要があることをお勧めします。

于 2012-11-14T17:25:19.987 に答える