linux里堆的释放
来源:互联网 发布:nginx 路由 配置 编辑:程序博客网 时间:2024/04/28 20:18
Linux用户进程是如何释放堆内存的
Linux进程使用内存的基本流程:
从图中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在glibc的堆管理策略上的(也就是glibc的动态内存分配策略上),堆的管理是由glibc进行的。
所以我们调用free对malloc得到的内存进行释放的时候,并不是直接释放给操作系统,而是还给了glibc的堆管理实体,而glibc会在把实际的物理内存归还给系统的策略上做一些优化,以便优化用户任务的动态内存分配过程。
那么glibc的堆管理器在什么时候才把物理内存归还给系统呢?
它会从堆的最大线性地址开始,从后向前计算用户任务当前有多少空闲的堆内存(直到碰到使用中的堆内存地址为止),比如在该图中,
它会认为有2048k的可释放内存,只有在该值大于某个特定的threshhold时(2.3.6上为64k),它才会把这些内存归还给系统。而在中间的“未使用”内存是不会归还给系统的,所以系统也不可能再利用这块物理内存页(我们假设系统没有swap区和swap文件),也就是说系统的内存会为此减少,除非在它之前的堆内存都用free进行释放以后,glibc的堆管理器才有可能(只是有可能)把该段内存归还给系统
- linux里堆的释放
- [图]Linux堆内存释放的总结
- 对Linux堆内存释放的总结
- 对Linux堆内存释放的总结
- 对Linux堆内存释放的总结
- 对Linux堆内存释放的总结
- 挖掘Linux操作系统堆内存释放的奥秘
- linux里的文件被删除空间没有被释放
- 程序中出现的堆释放问题
- 内存篇之堆的错误释放
- C++指针指向堆的创建释放
- 关于 释放堆内存出错的 问题
- 堆空间的开辟与释放
- 关于堆上的内存释放
- 堆的内存空间创建与释放
- 堆内存的分配和释放
- 释放linux的内存
- C#里using的作用------释放资源
- 用crossdev安装mips交叉编译工具链
- redhat as 4 安装 vim 7.3
- Gentoo如何配置网络
- vmware tools的安装
- httpclient 整理
- linux里堆的释放
- jce 私钥与OPENSSL私钥文件的版本兼容性及DER编码转换
- centos in virtualbox (nat 模式) 实现 ssh
- 约四成的平板和智能手机用户看电视时“一心多用”
- 访问IIS元数据库失败
- Exception in thread "main" java.io.IOException: Cannot run program "XX": CreateProcess error
- Enterprise Architect 8之数据建模(创建检查约束)
- COM技术初探(一)
- wmic 监视磁盘空间的批命令