微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何像Activity Monitor一样以编程方式检查Mac上的可用系统内存?

如何解决如何像Activity Monitor一样以编程方式检查Mac上的可用系统内存?

| 在Mac OS X上,我可以看到活动监视器中有多少可用内存。如何以编程方式执行此操作?     

解决方法

这应该做。 Google围绕结构中字段的确切含义进行了围绕,但是使用此代码应该是不言而喻的。
#import <sys/sysctl.h>
#import <mach/host_info.h>
#import <mach/mach_host.h>
#import <mach/task_info.h>
#import <mach/task.h>
int mib[6]; 
mib[0] = CTL_HW;
mib[1] = HW_PAGESIZE;

int pagesize;
size_t length;
length = sizeof (pagesize);
if (sysctl (mib,2,&pagesize,&length,NULL,0) < 0)
{
    fprintf (stderr,\"getting page size\");
}

mach_msg_type_number_t count = HOST_VM_INFO_COUNT;

vm_statistics_data_t vmstat;
if (host_statistics (mach_host_self (),HOST_VM_INFO,(host_info_t) &vmstat,&count) != KERN_SUCCESS)
{
    fprintf (stderr,\"Failed to get VM statistics.\");
}

double total = vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count;
double wired = vmstat.wire_count / total;
double active = vmstat.active_count / total;
double inactive = vmstat.inactive_count / total;
double free = vmstat.free_count / total;

task_basic_info_64_data_t info;
unsigned size = sizeof (info);
task_info (mach_task_self (),TASK_BASIC_INFO_64,(task_info_t) &info,&size);

double unit = 1024 * 1024;
memLabel.text = [NSString stringWithFormat: @\"% 3.1f MB\\n% 3.1f MB\\n% 3.1f MB\",vmstat.free_count * pagesize / unit,(vmstat.free_count + vmstat.inactive_count) * pagesize / unit,info.resident_size / unit];
    ,实际上,这仅是一半。 free不是标准的UNIX,而是仅Linux的命令。您不会在BSD或OS X上找到它。 因此,获取内存信息的更好方法是通过sysctl。 即跑
sysctl -a | grep -Ei \"(hw|vm)\\..*mem\"
这样您就会知道。 要在C中以编程方式使用此功能,请参考man sysctlbyname。 另外,我看不到GNOME系统监视器如何在OS X上提供帮助。 df是一个很好的提示。 如果您只是打算使用shell收集这些数据并选择top,请阅读man top。您可以使用-l 1调用top以仅获取一个样本,并使用-n 20将进程表限制为20个进程。 请记住,仅使用示例就不会获得proc的CPU值,原因在手册页中有概述。 一个简单的示例,以获取有关内存的一些信息(仅用于整行):
top -l1 -n 20 | grep -Ei \"mem|vm\"
希望能有所帮助。     ,在UNIX上执行此操作的常用命令是 df -h用于硬盘驱动器 免费用于RAM和交换 然后,您将使用/链接其中的一个或多个来提取给定的信息之一:ack,sed,grep,head,cut,... 注意:如果您不打算“以编程方式”检查内存,我建议您最好使用top来了解哪些进程正在使用您的CPU和RAM。 Gnome系统监视器是其GUI等效项之一。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。