malloc之后再进行free,free的内存空间一定被OS回收了吗

 我来答
聂姬
2018-03-22 · TA获得超过212个赞
知道答主
回答量:212
采纳率:96%
帮助的人:54.2万
展开全部

我认为是会的,内存肯定也是资源的一种存在形式。如果你不回收利用,你每次都要退出去,多来几次,那你的内存直接就没了。 若是glibc,你所free掉的内存,不一定会马上被OS回收,这是合理的。试想一下,你每次free掉的内存都还给OS的话,尤其是在小字节的情况下,那么造成的情况,就是一大块的内存被你弄的千疮百孔,也就是说一块内存,里面有很多gap。而在操作系统的虚拟内存管理中,更是管理着的是固定大小的内存,如4K,那你还给我1 Byte,OS显然是很尴尬的。

为了避免这个问题,内存管理通常有一个免费的列表,删掉的那些没用的东西就在这里面了。那么你可能会释放很散乱的内存过来,没关系,我们在这里会尝试合并这些散乱的block,而malloc首先找的也是free block list,而非从OS申请新的内存。

所以如果你找到了合适的自然最好的,如果你发现了一个比你想要的更大的,那么一部分malloc,另一部分放回去。而有的同学提到了小内存的问题,而这也是free block list在头部会有一些所谓的administrative data,所以用标准的malloc和free管理小内存是不高效,因为越小越容易造成gap。

最后友情提醒每个malloc实现都不同,不要只参考了一个实现之后就认为其它malloc实现也会做一样的取舍。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MacPaw
2023-07-25 广告
如果您是Mac电脑用户,并且希望定期清理电脑中的垃圾文件,以提高电脑速度和保持良好的运行状态,那么CleanMyMac是一个值得考虑购买的清理工具。CleanMyMac可以快速清理Mac电脑中的垃圾文件,包括系统清理、程序卸载、空间磁盘检测... 点击进入详情页
本回答由MacPaw提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式