4

C++ では、使用可能な RAM の量を確認するにはどうすればよいですか?

私はWindowsを使用していますが、WindowsだけでなくUnixの回答にも興味があります。

4

1 に答える 1

7

Windows: GlobalMemoryStatusEx . MSDN ページに詳細な C サンプル コードがあります。

Linux: "/proc/meminfo" ファイルを確認してください (説明)

OSX: この SO スレッドを参照してくださいOSX でプログラムによって物理メモリ サイズを決定する

しかし、質問は明確ではありません。物理メモリがあり、仮想メモリがあり、一部の未使用ページをディスク/他のストレージにスワップする OS 機能があります。

なんらかのシステム モニターを作成する必要がある場合は、私の回答で十分です。

malloc()/new[] 呼び出しが失敗しないことを確認する必要がある場合は、適切な例外をキャッチするか、NULL の結果を処理します。もう 1 つのオプションは、最初に大きなメモリ ブロックを取得し、そこに小さなブロックを割り当てる独自のアロケータを作成することです。

編集:コメントへの回答

WinAPI の MapViewOfFile および CreateFileMapping への呼び出しは、致命的な状況を除外するエラー コードを提供します。ファイルはプロセスのデータと共有される仮想アドレス空間にマップされるため、十分な数のページが利用可能かどうかを確認できます。つまり、32 ビット システムを使用している場合、8Gb ファイル全体を一度にメモリにマップすることはできません (ただし、その小さな部分をマップすることはできます)。現在のニーズには十分です。

于 2012-05-31T09:27:32.860 に答える