注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

ksnowlv的博客

积土成丘,集腋成裘,坚持再坚持!

 
 
 

日志

 
 

获取iOS设备的内存状况  

2013-05-21 18:03:49|  分类: IOS_其它 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

// 获取当前设备可用内存及所占内存的头文件

#import <sys/sysctl.h>

#import <mach/mach.h>




// 获取当前设备可用内存(单位:MB

- (double)availableMemory

{

    vm_statistics_data_t vmStats;

    mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;

    kern_return_t kernReturn = host_statistics(mach_host_self(),

                                               HOST_VM_INFO,

                                               (host_info_t)&vmStats,

                                               &infoCount);

    

    if (kernReturn != KERN_SUCCESS) {

        return NSNotFound;

    }

    

    return ((vm_page_size *vmStats.free_count) / 1024.0) / 1024.0;

}


// 获取当前任务所占用的内存(单位:MB

- (double)usedMemory

{

    task_basic_info_data_t taskInfo;

    mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;

    kern_return_t kernReturn = task_info(mach_task_self(),

                                         TASK_BASIC_INFO,

                                         (task_info_t)&taskInfo,

                                         &infoCount);

    

    if (kernReturn != KERN_SUCCESS

        ) {

        return NSNotFound;

    }

    

    return taskInfo.resident_size / 1024.0 / 1024.0;

}


BOOL memoryInfo(vm_statistics_data_t *vmStats) {

    mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;

    kern_return_t kernReturn = host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t)vmStats, &infoCount);

    

    return kernReturn == KERN_SUCCESS;

}


void logMemoryInfo() {

    vm_statistics_data_t vmStats;

    /*

     调用memoryInfo()就能拿到内存信息了,它的类型是vm_statistics_data_t。这个结构体有很多字段,在logMemoryInfo()中展示了如何获取它们。注意这些字段大都是页面数,要乘以vm_page_size才能拿到字节数。

     

     顺便再简要介绍下:free是空闲内存;active是已使用,但可被分页的(iOS中,只有在磁盘上静态存在的才能被分页,例如文件的内存映射,而动态分配的内存是不能被分页的);inactive是不活跃的,实际上内存不足时,你的应用就可以抢占这部分内存,因此也可看作空闲内存;wire就是已使用,且不可被分页的。

     */

    if (memoryInfo(&vmStats)) {

        NSLog(@"free: %u\nactive: %u\ninactive: %u\nwire: %u\nzero fill: %u\nreactivations: %u\npageins: %u\npageouts: %u\nfaults: %u\ncow_faults: %u\nlookups: %u\nhits: %u",

              vmStats.free_count * vm_page_size/1024/1024,

              vmStats.active_count * vm_page_size/1024/1024,

              vmStats.inactive_count * vm_page_size/1024/1024,

              vmStats.wire_count * vm_page_size/1024/1024,

              vmStats.zero_fill_count * vm_page_size,

              vmStats.reactivations * vm_page_size/1024/1024,

              vmStats.pageins * vm_page_size/1024/1024,

              vmStats.pageouts * vm_page_size/1024/1024,

              vmStats.faults,

              vmStats.cow_faults,

              vmStats.lookups,

              vmStats.hits

              ); 

    } 

}


调用:


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    

    NSLog(@"total = %f,used = %f",[self availableMemory],[self usedMemory]);

    

   logMemoryInfo();

}

运行如下:

2013-05-21 18:07:42.633 appMemoryTest[30528:11303] total = 210.566406,used = 16.042969

2013-05-21 18:07:44.915 appMemoryTest[30528:11303] free: 216

active: 2271

inactive: 848

wire: 756

zero fill: 3119706112

reactivations: 163

pageins: 1194

pageouts: 25

faults: 332561122

cow_faults: 3376818

lookups: 1160711

hits: 13

(lldb) 

  评论这张
 
阅读(317)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018