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 ビット以上の符号付き整数を返すようにする方法はありますか?