开发者社区> 问答> 正文

用free释放内存,但是内存没有被释放

写了个链表(http://github.com/tioover/c-study/blo... ,89行是释放的语句,申请内存的就在开头)
出现问题
明明用了free,但是内存没有被释放
写了个测试,生成了两千万个节点然后一个个free(https://github.com/tioover/c-study/bl...
我看内存占用,这个进程还占用着内存,除非关掉

展开
收起
a123456678 2016-06-03 18:26:16 3422 0
2 条回答
写回答
取消 提交回答
  • 想真释放用madvise

    2019-07-17 19:27:02
    赞同 展开评论 打赏
  • 对于第一个问题,这样简单的代码,你可以自己想办法找出程序结束的时候还有哪些内存没释放。提醒一下:每次申请的时候记录一下申请内存的地址(及代码行号),释放的时候标记被释放。

    第二个问题,这个跟C函数库的实现机制有关。free释放的内存并不会立刻、完全交回给系统。通常的实现是,malloc并不是每次都找内核要(因为找内核要比较慢),实际上是一次要一堆,然后再按需分配给你,因此每次free并不一定能保证把那次向内核申请的内存都不需要了。此外,即便是free了,很有可能程序很快还要申请,保留也是为了提高效率。

    2019-07-17 19:27:02
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
内存取证与IaaS云平台恶意行 为的安全监控 立即下载
云服务器ECS内存增强型实例re6全新发布 立即下载
低代码开发师(初级)实战教程 立即下载