C++ では、使用可能な RAM の量を確認するにはどうすればよいですか?
私はWindowsを使用していますが、WindowsだけでなくUnixの回答にも興味があります。
Windows: GlobalMemoryStatusEx . MSDN ページに詳細な C サンプル コードがあります。
Linux: "/proc/meminfo" ファイルを確認してください (説明)
OSX: この SO スレッドを参照してくださいOSX でプログラムによって物理メモリ サイズを決定する
しかし、質問は明確ではありません。物理メモリがあり、仮想メモリがあり、一部の未使用ページをディスク/他のストレージにスワップする OS 機能があります。
なんらかのシステム モニターを作成する必要がある場合は、私の回答で十分です。
malloc()/new[] 呼び出しが失敗しないことを確認する必要がある場合は、適切な例外をキャッチするか、NULL の結果を処理します。もう 1 つのオプションは、最初に大きなメモリ ブロックを取得し、そこに小さなブロックを割り当てる独自のアロケータを作成することです。
編集:コメントへの回答
WinAPI の MapViewOfFile および CreateFileMapping への呼び出しは、致命的な状況を除外するエラー コードを提供します。ファイルはプロセスのデータと共有される仮想アドレス空間にマップされるため、十分な数のページが利用可能かどうかを確認できます。つまり、32 ビット システムを使用している場合、8Gb ファイル全体を一度にメモリにマップすることはできません (ただし、その小さな部分をマップすることはできます)。現在のニーズには十分です。