# 何为内存泄漏?
内存泄漏在C/C++中的含义就是,在使用了malloc,new关键字之后,没有正确的使用free和delete关键字释放分配的内存,导致程序不断向系统索取内存,最后导致,系统的内存被白白浪费。
# 区分正常分配和泄漏
由内存泄漏的含义可以知道,一旦内存泄漏,一定会发生的事情就是,程序内存在不断增大,增大的幅度可能很小,也可能很大。注意,是不断增大,因为有些时候确实需要分配大量的内存为程序的启动铺垫,但是这些内存一旦分配完成,变动非常的小了,也就是说,这些正常的内存分配会让程序的内存到达一份峰值然后上下浮动,后续如果又有新的正常内存分配也是如此。总而言之,泄漏是内存时,内存大小呈现不断增长的趋势,而正常分配时,内存的大小呈现上下抖动。
# 定位泄漏
知道了正常分配和泄漏,我们可以直接通过观察一段时间内,内存大小的变化,判断出一段时间内是否发生内存泄漏。在VS中启动诊断工具,可以看到VS记录的内存,CPU等各项数据,我们聚焦内存大小,如果发现程序已经完全启动,但是内存仍然在不断上涨,说明发生了内存泄漏。这时候从大的函数开始,为每个函数设置断点,每个断点截取一个快照,比对各个断点之间的内存变化,可以判断出哪些函数出现内存分配,如果内存分配和预期不同,那就说明该函数中出现了内存泄漏。进入到该函数,为每个小函数打断点,重复上述操作,即可找到对应哪个函数出现了内存泄漏。