运行一段固定的时间然后终止的程序,大多不需要担心如何释放内存,当程序停止时所分配的内存会被自动回收。而当程序的生存时间要长一点,这就需要管理动态内存的分配和回收。这时在使用malloc()和free()时就要非常慎重。堆经常会出现两种类型的问题:
1.释放或者改写仍在使用的内存(称为“内存损坏”)。
2.未释放不再使用的内存(称为“内存泄漏”)

如何避免内存泄漏

每次当调用malloc分配内存时,注意在以后要调用相应的free来释放它。
如果不知道如何调用free与先前的malloc相对应,那么很可能已经造成了内存泄漏!
一种简单的方法就是在可能的时候使用alloca来分配动态内存,以避免上述情况。当离开调用alloca的函数时,它所分配的内存会被自动释放。
显然,这并不是用与那些比创建他们的函数生命期更长的结构,但如果对象的色很难过名期在该函数结束前便已停止,这种简历在堆栈上的动态内存分配是一种开销很小的选择,allocal就很难高效的实现。

如何检测内存泄漏

观察内存泄漏是一个两步骤的过程。
1.首先,使用swap命令观察还有多少可用的交换空间:
swap -s
在一两分钟内键入命令三到四次,看看可用的交换区是否在减少。还可以使用其他一些/usr/bin/*stat工具如netstat、vmstat等。如果发现不断有内存被分配且从不释放,一个可能的解释就是有个进程出现了内存泄漏。
2.第二个步骤就是确定可疑的进程,看看它是不是该为内存泄漏负责。你可能知道那个进程是罪魁祸首,不然可以使用“ps -lu用户名”命令来显示所有进程的大小。同样数次重复这个命令,可以发现任何动态分配内存的进程的大小都在增长。如果一个进程看上去不断的增长而从不缩小,它就又可能出现了内存泄漏。

读《C专家编程》笔记-关于内存泄漏相关推荐

  1. C++笔记-构造内存泄漏检测类的基本思路

    目录 基本概念 代码与实例 基本概念 这里主要的思路是,在一个对象在堆区创建后,就把他记录下来,也就是把他记录到某个地方,这个地方负责管理他(和Qt里面的对象树有异曲同工之妙)下面这个例子,把创建的新 ...

  2. Linux 网络编程笔记3 | 内存 系统调用

    七.内存 1.虚拟内存.物理内存.半导体内存和换页文件 虚拟内存:地址空间,虚拟的存储区域,应用程序所访问的都是虚拟内存. 物理内存:存储空间,实际的存储区域,只有系统内核可以访问物理内存. 虚拟内存 ...

  3. jni jvm 内存泄漏_解析Java的JNI编程中的对象引用与内存泄漏问题

    JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互--在 Java 程序中调用 native ...

  4. 解析Java的JNI编程中的对象引用与内存泄漏问题

    JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互--在 Java 程序中调用 native ...

  5. [转载] 解析Java的JNI编程中的对象引用与内存泄漏问题

    参考链接: Java对象如何存储在内存中 JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互 ...

  6. js 内存泄漏 简单

    内存生命周期:分配,使用(读或写),释放 内存泄漏:此块内存已经没用了,但依然占着位置没有被释放 (JS虽有自动分配内存,自动垃圾回收,但有时回收不了,需要手动回收) (自动垃圾回收机制:(引用计数) ...

  7. Java并发编程笔记之ThreadLocal内存泄漏探究

    使用 ThreadLocal 不当可能会导致内存泄露,是什么原因导致的内存泄漏呢? 我们首先看一个例子,代码如下: /*** Created by cong on 2018/7/14.*/ publi ...

  8. C专家编程-读书笔记(书本顺序)

    C语言设计哲学:   一切工作程序员自己负责.   语言中的所有特性都不需要隐式的运行时支持.   程序员所做的都是对的.   程序员应该知道自己在干什么,并保证自己的所作所为是正确的. ====== ...

  9. 实例解析网络编程中的另类内存泄漏

    本文分享自华为云社区<[网络编程开发系列]一种网络编程中的另类内存泄漏>,作者:架构师李肯. 1 写在前面 最近在排查一个网络通讯的压测问题,最后发现跟"内存泄漏"扯上 ...

  10. 开始读《C专家编程》

    前两天在网上看到<C专家编程>这本书的评价还不错,就去书店买了一本回来捧读,每天晚上看一些.探讨的问题确实比较深,都在讨论C语言本身的问题了.提到了C语言中的一些不足.本来认为C语言是无懈 ...

最新文章

  1. Kdevelop的简单使用和调试_JunJun~的博客-CSDN博客_kdevelop使用教程
  2. Android 数据库基本操作-2
  3. Caused by SSLError(“Can‘t connect to HTTPS URL because the SSL module is not available)
  4. Java HashMap遍历的两种方式
  5. AI专家Marcus质疑深度学习:面临十大挑战(含参考文献)
  6. Tango+Daydream,刀剑合璧的Android VR开发
  7. 使用jquery获取url及url参数的方法及定义JQuery扩展方法
  8. 解密Arm Neoverse V1 和 Neoverse N2 平台 为下一代基础设施带来计算变革
  9. python实现并发判重_寻找python大神!!!python如何多线程并发?
  10. CodeBlocks调试功能(转)
  11. 分区挂载,mount,blkid
  12. linux xps 13 wifi,戴尔XPS 13无线网卡替换教程和教程 | MOS86
  13. tcp 压力 测试 软件,强大的TcpServer压力测试工具及源码(附突破连接限制的方法和工具)...
  14. 谷歌不会退出中国市场的八大理由
  15. 集腋成裘-15-MongoDB系列-02Find详细
  16. lighttpd http响应报文(Response)增加安全头Referrer-Policy和X-Permitted-Cross-Domain-Policies方法
  17. Python-mne库使用教程
  18. 微信小程序用户登录信息过期处理
  19. 【转】售前的成长故事(19篇)
  20. SX1268 SX1262中文数据手册

热门文章

  1. 银联在线支付B2C UnionPay.NET
  2. pr cpu100%_【Premiere】视频剪辑必装插件,5个PR插件推荐
  3. 离散数学 计算机应用,计算机应用融入离散数学的思考
  4. java替换的程序_Java文本文件批量替换小程序的方法
  5. 【第68期】智能时代下的计算机系统能力培养
  6. EasyDrv 3.5 Beta 1.5驱动选择工具最新版
  7. 淘宝客APP源码社交电商uniapp开发源码前端源码自营商城
  8. 网页实现二维码扫描和解析
  9. linux设置自动清除内存碎片
  10. 网页设计html流水效果图,15例简单常用网页设计效果代码