空きメモリ量の取得

空きメモリ量を取得する際にはvm_statistics構造体を用いる。

#include <mach/vm_statistics.h>
struct vm_statistics
{
       integer_t       free_count;
       integer_t       active_count;
       integer_t       inactive_count;
       integer_t       wire_count;
       integer_t       zero_fill_count;
       integer_t       reactivations;
       integer_t       pageins;
       integer_t       pageouts;
       integer_t       faults;
       integer_t       cow_faults;
       integer_t       lookups;
       integer_t       hits;
};

typedef struct vm_statistics* vm_statistics_t;

この構造体のfree_countに空きメモリのページ数が格納される。尚、mach/vm_statistics.hはmach/host_info.hを読み込むと自動的に読み込まれる。
有効な値を取得する為には次のhost_statistics関数を用いる。

#include <mach/host_info.h>
kern_return_t   host_statistics
                (host_priv_t                          host_priv,
                 host_flavor_t                           flavor,
                 host_info_t                          host_info,
                 mach_msg_type_number_t         host_info_count);

host_privは統計情報を取りたいhostを示す。プログラムを実行するマシンの情報を得たいときはmach_host_self()関数を用いる。flavorは取得したい情報を示す。この場合はHOST_VM_INFOを指定する。正常に動作したときはhost_info
に値が格納される。host_info_countは入力時にはhost_infoの確保しているメモリの大きさ、正常に動作したときは返り値としてのhost_infoの大きさが格納されている。
以下はサンプルコード。

/* 空きメモリ量を標準出力に表示する */
#include <mach/host_info.h>
#include <mach/mach_init.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
  struct vm_statistics vm_info;
  mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
  host_statistics(mach_host_self(),HOST_VM_INFO,(host_info_t)&vm_info,&count);
  printf("%d\n",vm_info.free_count*vm_page_size);
  return 0;
}