私のマシンには8GBのRAMがあり、Windows Server 2008を実行しています。アプリケーションに1.5〜1.7GBがすでに割り当てられている場合、malloc / realloc()はより多くのメモリを割り当てることができません。代わりにHeapAlloc/HeapReallocに切り替えてみましたが、同じ状況が発生します。
ここに欠けているものはありますか?明らかに使用可能なRAMがある場合、アプリケーションがより多くのメモリを割り当てることができない原因は何でしょうか。
私のマシンには8GBのRAMがあり、Windows Server 2008を実行しています。アプリケーションに1.5〜1.7GBがすでに割り当てられている場合、malloc / realloc()はより多くのメモリを割り当てることができません。代わりにHeapAlloc/HeapReallocに切り替えてみましたが、同じ状況が発生します。
ここに欠けているものはありますか?明らかに使用可能なRAMがある場合、アプリケーションがより多くのメモリを割り当てることができない原因は何でしょうか。
マシンに搭載されているRAMの量は関係ありません。Windowsの各32ビットプロセスは4GBのアドレス空間を取得し、そのうち2GBがユーザーアドレス空間で使用可能です。したがって、プログラムのメモリ(コード、ロードされたdll、スタックなどを含む)は、このスペースからのみ割り当てられます。仮想アドレス空間の限界に近づいているため、メモリの割り当てに失敗しています。
デフォルトでは、Windows 32ビットOSでは、1つのプロセスに2DBを使用できます。MSVCコンパイラを使用する場合は、LARGEADDRESSAWAREオプションを設定する必要があります。
明らかに使用可能なRAMがある場合、アプリケーションがより多くのメモリを割り当てることができない原因は何でしょうか。
ヒープの断片化。割り当ては、単にメモリを要求するだけではありません。連続したメモリを要求します。
もちろん、提供したスパースデータ(それが発生したときにどのくらい再割り当てしようとしていますか?これは32ビットまたは64ビットのアプリですか?)を考えると、他の問題も発生する可能性があります。