zoukankan      html  css  js  c++  java
  • 如何在代码里打印程序所占用的内存

    在项目开发期间我们在内存调优的时候较多的使用系统的工具:

    Activity Monitor是能如实反应程序实际所占用内存的实时变化情况。 但是在这种模式下,我觉得自己不能看到控制台所打印的日志, 总而言之, 上面的这种查看程序内存的方法没有问题,

    但是如果你想在控制台里面打印出来程序所占用的内存,也可使用如下方法:

    void report_memory(void)
    {
        struct task_basic_info info;
        mach_msg_type_number_t size = sizeof(info);
        kern_return_t kerr = task_info(mach_task_self(),
                                       TASK_BASIC_INFO,
                                       (task_info_t)&info,
                                       &size);
        if( kerr == KERN_SUCCESS )
        {
            //printf("Memory vm : %u\n",info.virtual_size);
            //printf("Memory in use (in bytes): %u b\n", info.resident_size);
            //printf("Memory in use (in k-bytes): %f k\n", info.resident_size / 1024.0);
            printf("Memory in use (in m-bytes): %f m\n", info.resident_size / (1024.0 * 1024.0));
        }
        else
        {
            printf("Error with task_info(): %s\n", mach_error_string(kerr));
        }
    }

    记得在引入头文件:

    #import <mach/mach.h>

    如果想在整个程序内直接调用这个方法, 可以在*-Prefix.pch文件里引入声明:

    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
    #endif
    
    
    extern void report_memory(void);

    在你想打印内存的地方可以直接调用此方法:

    - (void)viewDidLoad
    {
        [super viewDidLoad];
          ////你的逻辑代码。。。。
         report_memory();
    }

    下面是控制台里打印出来的内存。(来自模拟器)

  • 相关阅读:
    linux-centos7安装mysql5.6
    CentOS Linux 7.2相关配置 以及环境搭建
    centos中查找占用磁盘大文件
    记录Redis在Windows下的安装与服务管理报错:Redis service failed to start.
    Spring cloud ----- 服务治理
    Spring Cloud技术分析
    Linux常用命令总结
    Java面试题总结(不断更新中)
    SpringBoot几种定时任务的实现方式
    Java 定时任务---Timer
  • 原文地址:https://www.cnblogs.com/moshengren/p/2573610.html
Copyright © 2011-2022 走看看