app的使用内存统计区别

2021-09-28  本文已影响0人  太空蛙

app开发过程中,我们经常需要查看内存的一些详细信息。
ios一般是通过xcode、Instruments(Allocations),代码获取当前使用内存如下:

#import <mach/mach.h>
#import <os/proc.h>

//获取app使用内存情况(注:对只malloc的内存,不会统计,只有进行了写操作才会统计进来)
+ (NSInteger)useMemoryForApp{
    task_vm_info_data_t vmInfo;
    mach_msg_type_number_t count = TASK_VM_INFO_COUNT;
    kern_return_t kernelReturn = task_info(mach_task_self(), TASK_VM_INFO, (task_info_t)&vmInfo, &count);
    if (kernelReturn == KERN_SUCCESS) {
        int64_t memoryUsageInByte = (int64_t)vmInfo.phys_footprint;
        return (NSInteger)memoryUsageInByte/1024/1024;
    }
    return 0;
}

这里代码获取的内存大小跟xcode的memory大小差不多,但是跟Instruments(Allocations)有时相差比较大。

//分配100M内存并初始化为1
void *p = malloc(1024*1024*100);
memset(p, 1, 1024*1024*100);

对于上述代码,分配内存后进行了相关操作,Instruments的Allocations、Activity Monitor都会统计显示。

//分配100M内存,未初始化
void *p = malloc(1024*1024*100);

对于上述代码,只分配了内存,没有进行后续操作,Instruments的Allocations会统计显示,但是Activity Monitor和代码获取的方式则认为没有真正使用到这块内存,不会统计显示。

上一篇 下一篇

猜你喜欢

热点阅读