• 售前

  • 售后

热门帖子
入门百科

Linux用户进程是怎样释放内存的

[复制链接]
更强 显示全部楼层 发表于 2021-10-25 18:44:00 |阅读模式 打印 上一主题 下一主题
Linux用户进程是怎样释放内存的
Linux进程使用内存的根本流程:

从图中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在glibc的堆管理策略上的(也就是glibc的动态内存分配策略上),堆的管理是由glibc举行的。以是我们调用free对malloc得到的内存举行释放的时间,并不是直接释放给操纵体系,而是还给了glibc的堆管理实体,而glibc会在把实际的物理内存归还给体系的策略上做一些优化,以便优化用户使命的动态内存分配过程。
那么glibc的堆管理器在什么时间才把物理内存归还给体系呢?
它会从堆的最大线性地址开始,从后向前计算用户使命当前有多少空闲的堆内存(直到碰到使用中的堆内存地址为止),好比在该图中:

它会以为有2048k的可释放内存,只有在该值大于某个特定的threshhold时(2.3.6上为64k),它才会把这些内存归还给体系。而在中间的“未使用”内存是不会归还给体系的,以是体系也不可能再使用这块物理内存页(我们假设体系没有swap区和swap文件),也就是说体系的内存会为此淘汰,除非在它之前的堆内存都用free举行释放以后,glibc的堆管理器才有可能(只是有可能)把该段内存归还给体系。
由此,我们在使用malloc/free时应该警惕,特殊是在初始化时分配了好多内存,但是在这之后却再也不必要这么多的内存了,而这块内存又没有到达threshhold值或者在堆的最高线性地址处有某块内存没有释放,但是它前面的所有堆内存都释放了;这种情况下,用户使命将会浪费一些物理内存,这在资源比较告急的嵌入式体系中是不可容忍的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作