一、项目内存占比分析
VMMap是对进程所用虚拟、物理内存进行分析的工具,可以统计进程所使用的虚拟、物理内存并以条形图与文字的形式进行呈现。VMMap的过滤和刷新功能可以及时观察进程内存使用的来源以及占用情况。 运行KFTPClient项目,并使用VMMap工具进行检测,可首先观察到如下界面。 其中顶部为进程基本信息,下部为各类类型空间占用条形图。Committed表示进程向操作系统所申请的需要使用到的虚拟内存大小;Private Bytes表示进程所私用使用的虚拟内存大小;Working Set表示进程目前所使用的物理内存大小。 从图中可知,KFTPClient项目启动后,虚拟内存分配空间大小为16952K,项目所私有使用的虚拟内存空间大小为1712K,进程所实际使用的物理内存空间大小为6924K。 在工具的中部区域,对进程内存总体信息进行了进一步分析 横向表头分别代表总体内存大小、申请内存大小、私有内存大小,总体物理内存带下、私有物理内存大小、共享物理内存大小等类型。纵向表头代表总体、进程自身可执行文件以及包含的所有库、内存映射文件、共享内存、堆区空间、栈区空间等类型。其中new与malloc等分配的空间为堆区域,栈区域空间会主动释放,因此进一步对堆区空间进行分析。二、项目内存泄露点
Visual Leak Detector,它是一款用于 Visual C++免费的内存检测工具。VLD可以得到内存泄漏点的调用堆栈、泄露内存的完整数据,还可以设置内存泄露报告的级别。在VS项目中,加上项目编写过程中遇到的泄漏点:
原因分析:在KListCommand类中,new了KTcpClient类创建socket,KPortCommand类与KPasvCommand类封装PORT和PASV命令包,在KListCommand类的析构函数~KListCommand()中,delete 三个new并不能释放堆区空间,需要在函数体中,new完、使用完、立即delete。
总结:在哪new,在哪delete!!!!!!