SylixOS调试与性能分析技术--内存泄漏检测

1.内存泄漏检测原理

内存泄漏是指程序中已动态分配的堆内存因为某种缘由程序未释放或没法释放,形成系统内存的浪费,致使程序运行速度减慢甚至系统崩溃。node

SylixOS提供了内存检测方法,能够检测和跟踪内存泄漏,其原理以下:shell

l 当开启内存泄漏检测功能时,建立一个链表;app

l 当执行申请内存操做时,将信息记录至链表中的一个节点;spa

l 当执行释放内存操做时,将对应的链表节点信息删除;调试

l 当执行打印内存泄漏跟踪消息时,打印链表中全部的节点数据。进程

 

2.内存泄漏检测调试技术

SylixOS经过在系统中输入shell命令进行内存泄漏检测,其命令以下:内存

l leakchkstart [max save node number] [pid](启动堆泄漏检查)io

leakchkstart命令须要提供两个参数:原理

最大跟踪节点数(若是泄漏超过这个数就不记录)内存泄漏

PID信息(当PID大于0时,检测指定进程PID;PID等于0时,检测内核进程;当PID小于0时,检测全部进程)

l leakchkstop(中止堆泄漏检查并打印泄漏消息)

l leakchk(打印内存泄漏跟踪消息)

 

3.内存泄漏检测示例

启动内存泄漏检查,如程序清单3.1所示。

程序清单3.1 启动内存泄漏检测

 

[root@sylixos:/apps/app_demo]# leakchkstart 1024 -1
leakcheck start checking...

 

打印当前内存泄漏信息,如程序清单3.2所示。

程序清单3.2 打印内存泄漏信息

 

[root@sylixos:/apps/app_demo]  leakchk
HEAP     THREAD     TIME     ADDR     SIZE     PURPOSE
------- --------- -------- -------- ------- ----------------------

 

模拟内存泄漏,如程序清单3.3所示。

程序清单3.3 模拟内存泄漏

 

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char **argv)
{
    int *p;

    p = (int*)malloc(sizeof(int) * 128);

    return  (0);
}

 

 

再次打印当前内存泄漏信息,如程序清单3.4所示。

程序清单3.4 再次打印泄漏信息

 

[root@sylixos:/apps/app_demo]# leakchk
HEAP     THREAD     TIME     ADDR     SIZE     PURPOSE
------- --------- -------- -------- ------- ----------------------
1 app_demo       Sat Jan 01 09:47:56 2017 c2055008        116 mem alloc

 

 

中止内存泄漏检查并打印泄漏信息,如程序清单3.5所示。

程序清单3.5 中止内存泄漏检测

 

[root@sylixos:/apps/app_demo]# leakchkstop
HEAP     THREAD     TIME     ADDR     SIZE     PURPOSE
------- --------- -------- -------- ------- ----------------------
1 app_demo       Sat Jan 01 09:47:56 2017 c2055008        116 mem alloc

total unfree segment: 1 size: 116
相关文章
相关标签/搜索