Linux用户进程如何释放内存
Linux进程使用内存的基本过程:
从图中我们可以看到,这个过程的堆不直接建立在Linux的内核的内存分配策略,但对glibc,堆管理策略,glibc的动态内存分配策略。堆的管理是由glibc进行。所以我们称之为自由的Mal
Linux用户进程如何释放内存
Linux进程使用内存的基本过程:
从图中我们可以看到,这个过程的堆不直接建立在Linux的内核的内存分配策略,但对glibc,堆管理策略,glibc的动态内存分配策略。堆的管理是由glibc进行。所以我们免费使用malloc来获取内存释放的时候,是不能直接发布到操作系统,但也堆管理实体glibc,和glibc将物理内存中做了一些优化返回策略体系,以优化用户的任务动态内存分配过程。
所以当glibc的堆管理器返回的物理内存的系统
它从堆的最大线性地址开始,从返回到用户任务计算空闲堆内存的数量,直到它满足堆内存地址的使用。
它会认为有2048k的freable记忆。只有当价值大于特定阈值(2.3.6是64K),它将返回的内存系统,在未使用的中间;记忆不返回到系统中,使系统不能使用的物理内存页(我们假设系统没有互换和互换文件),也就是说系统的内存会因此减少,除非在它的堆内存的释放后,堆管理器glibc可能(只是可能)的内存返回给系统。
因此,我们应该使用malloc /免费的时候要小心,尤其是当初始化大量内存分配,但之后就不需要这么多的记忆,但记忆也不在最高阈值或线性地址堆栈内存块达到不释放,但都堆在前面它的释放;在这种情况下,用户任务会浪费一些物理内存,在嵌入式系统中的资源是不能容忍的。