• 【C语言】一次内存泄露的分析的记录


    今天运行一个程序,程序刚启动时占用内存很小,在运行过程中发现占用的内存会一直增大。

    用cat /proc/pid/statm的方式查看发现也确实在一直增大。

    而且这个程序移植到另外一个平台后,会直接无法运行。

    ——————————————————————————————————————————

    我不明白为什么,以为哪里内存泄露了,但是这几乎不可能啊,因为我所有的内存分配都是初始化时完成的,

    分配了一些pool和queue,在while(1)大循环中根本没有分配内存啊。

    我然后用Valgrind工具检查了一下,当然我有一大堆内存分配都没有free,但是这对我来说没关系,因为我

    while(1)中并不会继续malloc。

    ——————————————————————————————————————————

    然而见鬼了,整个运行过程中就是会会一直增大。

    到底怎么回事呢?怎么回事呢?

    原来是因为malloc之后,分配的内存直到真正用到之时才会分配,而在嵌入式平台上,好像它会提前分配好。

    这个malloc的特性我当然知道,这一次之所以没有注意到,是因为我认为我分配的内存是远远小于机器的内存的,即使全部占用了, 也不会一直增加,

    而实际情况是,我分配的内存确实太大了,超过了机器的内存,当超过时,就直接报错了,这个时候我直觉的反应是哪里泄露了,而没有想malloc的问题。

    因为我写了一个新库,我以为是新库的问题。

  • 相关阅读:
    MySQL与Redis结合方案
    Linux系统如何监控服务器硬件、操作系统、应用服务和业务
    【MySQL】MySQL复制之防崩溃从节点
    Linux系统vim编辑器换行至文件的行首及行尾操作
    Xtrabackup远程备份
    innodb_force_recovery参数分析
    Oracle异构平台迁移利器之XTTS(使用rman方式)
    ES6基础语法
    读郭老师推荐书籍--《原则》
    PhpStorm 的基本应用
  • 原文地址:https://www.cnblogs.com/likeyiyy/p/4602551.html
Copyright © 2020-2023  润新知