例によって例の如く,無責任かつ雑なので参考程度に.
もう少しサクっと取得できないものだろうか.vm_stat をパースする以外の手法で!
vmstatistics.c
#include <stdio.h>
#include <stdlib.h>
#include <mach/mach_init.h>
#include <mach/mach_host.h>
#define MB / 1024 / 1024.0
#define GB MB / 1024.0
int main(int argc, char **argv)
{
struct vm_statistics vm_stat;
struct host_basic_info host_info;
host_priv_t host_priv = mach_host_self();
mach_msg_type_number_t count = HOST_VM_INFO_COUNT;
kern_return_t err = KERN_SUCCESS;
err = host_statistics(host_priv, HOST_VM_INFO, (host_info_t)&vm_stat, &count);
if( err != KERN_SUCCESS ) {
perror("host_statistics");
exit(err);
}
double free_size = (vm_stat.free_count * vm_page_size) GB;
double active_size = (vm_stat.active_count * vm_page_size) GB;
double inactive_size = (vm_stat.inactive_count * vm_page_size) GB;
double wire_size = (vm_stat.wire_count * vm_page_size) GB;
printf("page size ; %ld bytes\n", vm_page_size);
printf("free ; %lf GB\n", free_size);
printf("active ; %lf GB\n", active_size);
printf("inactive ; %lf GB\n", inactive_size);
printf("wire ; %lf GB\n", wire_size);
printf("total ; %lf GB\n", free_size + active_size + inactive_size + wire_size);
return 0;
}
% clang vmstatistics.c -o vmstatistics && ./vmstatistics
page size ; 4096 bytes
free ; 4.442173 GB
active ; 1.930828 GB
inactive ; 0.878677 GB
wire ; 0.746510 GB
total ; 7.998188 GB