空きメモリ量の取得
空きメモリ量を取得する際には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; }