一种穷人式的内存泄露检测办法
关于分析发现代码中存在的资源浪费情况,市面上已经有很多工具了,但是今天我们再来介绍一种新的方式,这种方式不需要安装任何工具或者特定的编译器开关,也不需要第三方库。 假设你的程序正在泄漏内存。连续大量使用十五小时后,程序开始出现内存不足故障。你显然在泄露一些东西,但是泄露的具体是什么呢? 想想看:如果你泄露了一些东西,那么就会有很多。而你没有泄漏的东西数量很少。因此,如果你随机抓取进程快照,它很可能是一个泄漏的物体!用数学术语来说,假设程序的正常内存使用量为 15 MB,但由于某种原因,你已经用完了 1693 MB 的动态分配内存。由于其中只有 15 兆字节是正常的内存使用量,因此其他 1678 兆字节必须是泄漏的数据。如果从堆中转出随机地址,则找到泄漏对象的可能性大于 99%。 因此,随机抓取十几个地址并转储它们。你很可能会一遍又一遍地看到相同的数据模式。那是程序的泄漏点。如果它是一个具有虚拟方法的C++对象,转储 vtable 将快速识别它是什么类型的对象。如果是 POD(Plain Old Data) 类型,通常可以通过正确地查找指针字符串缓冲区或指向其他数据的指针快捷方式来准确地识别它指向的是什么。 最终结果可能会有所不同,但我发现这是一种非常成功的技术,可以把它想象成一种精神力量。在大多数情况下,你可以通过使用它来创建自己的网站,但是如果你想要在一个不同的平台上运行,你需要考虑一些问题。 (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |