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和代码获取的方式则认为没有真正使用到这块内存,不会统计显示。
网友评论