现在位置: 首页 > 内存泄漏
灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题。当程序越来越复 杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题。内存泄漏是最常见的内存问题之一。内存泄漏如果不是很严重,在短时间内对程序不会有太大的 影响,这也使得内存泄漏问题有很强的隐蔽性,不容易被发现。然而不管内存泄漏多么轻微,当程序长时间运行时,其破坏力是惊人的,从性能下降到内存耗尽,甚 至会影响到其他程序的正常运...
阅读全文
2019-05-12 21:46 工业·编程 ⁄ 共 1131字 暂无评论
之所以撰写这篇文章是由于前段时间花费了非常大的精力在已经成熟的代码上再去处理memory leak问题。写此的目的是希望我们应该养成良好的编码习惯,尽可能的避免这种问题,由于当你对着一大片的代码再去处理此类的问题,此时无疑添加了解决的成本和难度。准确的说属于补救措施了。 一. 什么是内存泄漏(memory leak) 指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用...
阅读全文
Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和delete),找出内存泄漏问题。 Valgrind 中包含的 Memcheck 工具可以检查以下的程序错误: 使用未初始化的内存 (Use of uninitialised memory) 使用已经释放了的内存 (Reading/writing memory after it has been free’d) 使用超过malloc分配的内存空间(Reading/writi...
阅读全文
2019-05-09 21:12 工业·编程 ⁄ 共 598字 暂无评论
内存泄露问题是c语言很容易出现的问题,小程序可以很容易的发现,但是大程序就比较难发现了。 内存泄露是由于动态分配的内存没有被释放,可以使用valgrind等工具检查出来。 常见导致内存泄露的函数有malloc、calloc,以及间接使用malloc的函数strdup、strndup等。还包括mmap函数。 要避免内存泄漏需要以下函数成对出现: malloc/free calloc/free strdup/free strndup/free mmap/munmap <以后遇到坑,继续添加> 我遇到的...
阅读全文
文章目录 附录     最近在论坛里看到很多人问怎样检查内存泄漏,对于Windows CE/Windows Mobile开发,微软已经为我们提供了很好的工具Application Verifier。AppVerifier是一个辅助开发工具,不用修改代码,可以检测出程序内存,句柄, GDI对象泄漏,并报告分配泄漏对象的调用栈,有过在大规模代码里查资源泄漏的兄弟应该知道这个调用栈的价值。  ...
阅读全文
2014-02-20 05:57 工业·编程 ⁄ 共 7344字 暂无评论
    程序员、软件架构师、测试人员以及安全咨询师所面临的最大难题之一是,了解其应用程序部署到产品时的结果。即使具备对源代码的访问,也很难掌握执行过程中将发生的每个操作,这归咎于存在多种依赖项(例如,服务于代码或利用外部组件的多个组)。在帮助管理这种复杂性以及错误带来的潜在的副面影响方面,Microsoft AppVerifier 扮演着重要的角色。AppVerifier 有助于找到细小的编程错误、安全问题和用户帐户...
阅读全文
2013-09-16 22:56 工业·编程 ⁄ 共 484字 暂无评论
   用MFC的程序的话,很简单。默认的就有内存泄露检测的功能。     我们用VS2005生成了一个MFC的对话框的程序,发现他可以自动的检测内存泄露。不用我们做任何特殊的操作。 仔细观察,发现在每个CPP文件中,都有下面的代码:     #ifdef _DEBUG     #define new DEBUG_NEW       #endif     DEBUG_NEW 这个宏定义在afx....
阅读全文
2013-06-15 05:40 工业·编程 ⁄ 共 2801字 评论 1 条
    内存池(MemPool)技术备受推崇。我用google搜索了下,没有找到比较详细的原理性的文章,故此补充一个。另外,补充了boost::pool组件与经典MemPool的差异。同时也描述了MemPool在sgi-stl/stlport中的运用。 相关阅读 --一种固定内存池的实现(含代码)     经典的内存池(MemPool)技术,是一种用于分配大量大小相同的小对象的技术。通过该技术可以极大加快内存分配/释放过程。下面我们详细解...
阅读全文
2013-06-08 05:05 工业·编程 ⁄ 共 265字 暂无评论
    从线程安全的角度来分,内存池可以分为单线程内存池和多线程内存池。从内存池可分配内存单元大小来分,可以分为固定内存池和可变内存池。     可见与系统管理内存相比,内存池的操作非常迅速,它在性能优化方面的优点主要如下: (1)针对特殊情况,例如需要频繁分配释放固定大小的内存对象时,不需要复杂的分配算法和多线程保护。也不需要维护内存空闲表的额外开销,从而获得较高的性能。 ...
阅读全文
由于C/C++语言没有所谓的垃圾收集器,内存的分配和释放都需要程序员自己来控制,这会给C/C++程序员带来一定的困难。当您的程序越来越复杂时,它的内存管理也会变得越来越困难。内存泄漏、内存越界是最常见的内存问题之一。 》》》关于VS2008中C/C++内存泄漏的定位的方法 内存泄漏如果不是很严重的话,在短时间内对程序不会造成太大的影响,而且在进程终止的时候,所有分配的内存都会释放掉。但是对于长时间运行的程序,...
阅读全文