Linux用户进程是如何释放内存的

如题所述

Linux用户进程是如何释放内存的
   Linux进程使用内存的基本流程:

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

   它会认为有2048k的可释放内存,只有在该值大于某个特定的threshhold时(2.3.6上为64k),它才会把这些内存归还给系统。而在中间的“未使用”内存是不会归还给系统的,所以系统也不可能再利用这块物理内存页(我们假设系统没有swap区和swap文件),也就是说系统的内存会为此减少,除非在它之前的堆内存都用free进行释放以后,glibc的堆管理器才有可能(只是有可能)把该段内存归还给系统。
   由此,我们在使用malloc/free时应该小心,特别是在初始化时分配了好多内存,但是在这之后却再也不需要这么多的内存了,而这块内存又没有达到threshhold值或者在堆的最高线性地址处有某块内存没有释放,但是它前面的所有堆内存都释放了;这种情况下,用户任务将会浪费一些物理内存,这在资源比较紧张的嵌入式系统中是不可容忍的。
温馨提示:内容为网友见解,仅供参考
无其他回答

Linux用户进程是如何释放内存的
Linux用户进程是如何释放内存的    Linux进程使用内存的基本流程:   从图中我们可以看出,进程的堆,并不是直接建立在Linux的内核的内存分配策略上的,而是建立在glibc的堆管理策略上的(也就是glibc的动态内存分配策略上),堆的管理是由glibc进行的。所以我们调用...

Linux下释放内存的技巧分享linux释放内存
一、内存状态检测 要想及时有效地释放Linux内存,首先要弄清楚目前系统内存的使用情况。用户可以用free -m来查看内存使用情况:free -m # 查看内存使用情况 二、系统Caches部分释放内存 系统的Caches是系统的虚拟内存使用的,因此这部分内存不一定是实际占用的,更像是一种快速存取的缓存。由此,可以释...

释放内存的三种方法
释放内存的方法主要有三种,其中一种是调整Linux内核参数vm.swappiness的值,以尽大限度地使用物理内存。swappiness参数的设置会影响系统对交换空间的使用。具体操作可以通过sysctl命令进行,设置后可以通过cat命令验证设置是否成功。六、手动清理与swap分区 在某些情况下,可能需要手动清理swap分区占用的内存。可以...

linux内存回收的三种方式linux内存回收
如果内存够,进程不去主动回收,内存是不会释放的Linux系统的缓存机制是相当先进的,他会针对dentry(用于VFS,加速文件路径名到inode的转换)、BufferCache(针对磁盘块的读写)和PageCache(针对文件inode的读写)进行缓存操作。但是在进行了大量文件操作之后,缓存会把内存资源基本用光。但实际上我们文件操...

如何手动释放linux内存的方法
手动释放Linux内存的方法主要包括清理缓存和使用工具命令。1. 清理缓存 Linux系统使用缓存来提高性能。但有时,这些缓存可能会占用大量内存。可以通过清理缓存来手动释放内存。常用的缓存清理命令包括:`sync`:该命令确保所有尚未写入磁盘的缓冲数据被写入磁盘,从而释放页缓存中的内存。`echo 1 > \/proc\/sys...

linux系统如何释放内存
root@node1 ~]# cat \/proc\/sys\/vm\/drop_caches 再看内存 [root@node1 ~]# free -m   total used free shared buffers cached   Mem: 8004 631 7372 0 0 60   -\/+ buffers\/cache: 570 7433   Swap: 1983 0 1983 终于释放出来了。

Linux内核中如何申请和释放内存?
1、首先打开Linux命令窗口,可使用快捷键Ctrl+Alt+T打开。2、这时查看一下当前Linux系统内存使用情况,使用命令:Free –m,total 内存总数,used 已经使用的内存数,free 空闲的内存数。3、接下来的操作需要先获取高级用户权限,输入命令:sudo -i,确定后输入高级用户密码。4、这时进行拷贝文件拷贝,增加...

[Linux内存机制]Swap机制以及如何手动释放swap和内存
swap的大小是有限制的,当swap使用完毕后,操作系统会触发OOM-Killer机制,将消耗内存最多的进程kill掉以释放内存。关于数据库对swap的看法,几乎所有数据库都不喜欢swap,这主要与以下两个方面有关:swap的工作机制需要我们了解,要降低swap的影响,就必须弄清楚Linux内存回收是如何工作的,这样才能不遗漏...

解放Linux内存释放缓存linux释放缓存
虽然`echo 3 > \/proc\/sys\/vm\/drop_caches`可以清除掉Linux系统中所有的内存缓存,但是它只是暂时的清除,重启Linux系统之后,缓存空间会被重新分配。另外,如果存在大量进程正在使用内存,清除缓存也可能会影响现有进程的正常运行。因此,在释放Linux内存之前,需要了解系统运行状态,考虑具体的情况以及可能的...

如何为linux释放内存和缓存
所以,我们还是有必要来手动进行Linux下释放内存的操作,其实也就是释放缓存的操作了。要达到释放缓存的目的,我们首先需要了解下关键的配置文件\/proc\/sys\/vm\/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:0 – 不...

相似回答
大家正在搜