malloc和free是怎么工作的。


free一般不会把内存还给系统(只会发生在一些很罕见的情况下)


第一个原因是这是在你的堆中产生很多碎片,这样在你申请完2G或者4G的虚拟内存后产生很多内存碎片。


第二个原因是操作系统一般只能处理那些固定大小或者是对齐的内存块,比如4KB,例如你申请了一个堆之后,再申请一个堆,删除前面一个堆,这样就会产生内存碎片。


free函数将会把内存块放回自己的内存块链表中,一般自由链表块会合并毗连的地址空间.自由链表块是一个内存块的循环链表,并且在每个内存块的头部存有管理数据。因为很小的内存块已经合并过了,这个时候再把很小的内存还给操作系统这是效率很低的一件事情。


新申请堆时,如果从自由链表那里取到比较大的内存,这取出一部分给调用者,另一部分还给自由链表


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值