在Mac上用Objective-C获取系统内存使用情况

最终内存值是根据各类内存(活跃,非活跃,联动,空闲)使用的页面数*单个页面大小所得。

#import <mach/mach.h>
#import <mach/mach_host.h>

- (NSString *)generateNumberFromValue:(unsigned long)originalValue {
    NSString * string = nil;
    double converteredValue = 0.0;
    if (originalValue >= 1000000000L) {
        converteredValue = originalValue / 1024.0 / 1024.0 / 1024.0;
        string = [NSString stringWithFormat:@"%.2lf GB Free", converteredValue];
    } else {
        converteredValue = originalValue / 1024.0 /1024.0;
        string = [NSString stringWithFormat:@"%.0lf MB Free", converteredValue];
    }
    return string;
}

- (NSDictionary *) generateMemoryInfo {
    mach_port_t host_port;
    mach_msg_type_number_t host_size;
    vm_size_t pagesize;
    
    host_port = mach_host_self();
    host_size = sizeof(vm_statistics_data_t) / sizeof(integer_t);
    host_page_size(host_port, &pagesize);
    
    vm_statistics_data_t vm_stat;
    
    if (host_statistics(host_port, HOST_VM_INFO, (host_info_t)&vm_stat, &host_size) != KERN_SUCCESS)
        NSLog(@"Failed to fetch vm statistics");
    
    /* Stats in bytes */
    unsigned long mem_used = (vm_stat.active_count +
                          vm_stat.inactive_count +
                          vm_stat.wire_count) * (unsigned long)pagesize;
    unsigned long mem_free = vm_stat.free_count * (unsigned long)pagesize;
    unsigned long mem_total = (unsigned long)mem_used + (unsigned long)mem_free;
    NSLog(@"used: %ld free: %ld total: %ld pageSize: %ld", mem_used, mem_free, mem_total, pagesize);
        
    NSString * memoryUsedNumber = [self generateNumberFromValue:mem_used];
    NSString * memoryFreeNumber = [self generateNumberFromValue:mem_free];
    NSString * memoryTotalNumber = [self generateNumberFromValue:mem_total];
    
    NSDictionary * dict = @{@"MemoryUsed":memoryUsedNumber, @"MemoryFree":memoryFreeNumber,
                @"MemoryTotal":memoryTotalNumber};
    return dict;
}

 

转载于:https://www.cnblogs.com/showmylym/archive/2013/01/18/2865893.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值