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

阅读 7.1k
1 个回答

对于第一个问题,这样简单的代码,你可以自己想办法找出程序结束的时候还有哪些内存没释放。提醒一下:每次申请的时候记录一下申请内存的地址(及代码行号),释放的时候标记被释放。

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进