5

8 ギガのメモリがインストールされているマシンで作業しており、マシンにインストールされているメモリの量をプログラムで判断しようとしています。インストールされているメモリの量を取得するために sysctlbyname() を使用しようとしましたが、符号付きの 32 ビット整数を返すことに制限されているようです。

uint64_t total = 0;
size_t size = sizeof(total);
if( !sysctlbyname("hw.physmem", &total, &size, NULL, 0) )
     m_totalMemory = total;

上記のコードは、sysctlbyname に渡される型に関係なく、total 変数で常に 2147483648 を返します。IOKit と IORegistryExplorer を調べて、インストールされているメモリを特定する別の方法を探しましたが、これまでのところ何も見つかりませんでした。IORegistryExplorer で IODeviceTree:/memory を見つけましたが、サイズのフィールドがありません。IOレジストリの他の場所にも何も見つかりません。IOKit 経由でこの情報にアクセスする方法、または sysctlbyname が 32 ビット以上の符号付き整数を返すようにする方法はありますか?

4

2 に答える 2

8

sysctl()およびクエリを使用できますHW_MEMSIZE。これは、デフォルトの 32 ビット整数ではなく、64 ビット整数としてメモリ サイズを返します。

詳細はman ページに記載されています。

于 2009-09-08T22:44:28.753 に答える
7

簡単な方法:

[[NSProcessInfo processInfo] physicalMemory]
于 2009-09-08T22:38:54.210 に答える