linux采用啥方法实现内存的分配和释放

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux采用啥方法实现内存的分配和释放相关的知识,希望对你有一定的参考价值。

.....................

Linux 采用 Buddy 算法有效分配和释放物理页块。
linux系统内存管理的特点linux的进程结束后,它占用的资源全部释放,但是内存仅仅是设置了标志,标志了这部分内存已经不再使用,可以被重新分配的。当进程需要内存时,linux系统首先从空闲内存中查找分配,空闲内存不足时就会使用不再使用的内存;另外,如果你的程序又一次运行,系统直接使用内存中
的数据,不再从文件系统读组,提高了效率。这样一来,linux的系统使用律会很高,服务器的在98%以上;这样做的目的是:linux认为内存是最宝贵
的资源,充分利用,不能让他空闲
参考技术A 你可能用过malloc()这个函数来获取一定大小的内存吧,这就是分配,这个函数底层调用get_free_page()函数向内核申请一页大小的内存空间,一页的大小是4kb(这个大小可以在page.h文件中修改的),如果你malloc申请的空间大小小于4k,就分配一页,大于4k,就分配n页,也就是说内存分配的最小单位是一页。每一页又由一个页面描述结构体描述,具体是哪个结构体..我忘记了,这个结构体用来标识这一页的使用情况(是否被占用,被哪个进程占用,它的页帧号是多少,是否被释放等等)。
那么内存的释放又是怎么释放的呢?其实就是进程退出后,内核线程回收进程的地址空间时候,改变这个“页描述结构体”的某些成员,标识这个页以后可以被分配给其他进程啦。
至于内存的管理,涉及mmu协处理器...虚拟地址物理地址的转换问题,这些就涉及硬件啦,你可以买本《linux内核设计及实现》这本书看看就能理解啦。这里不多说啦。
参考技术B 是不是可以用负载均衡。。。考虑下吧。。

以上是关于linux采用啥方法实现内存的分配和释放的主要内容,如果未能解决你的问题,请参考以下文章

在 GC 环境中,Core Data 啥时候会释放其分配的内存?

当试图释放堆管理器分配的内存时会发生啥,它分配的比要求的多?

Linux手动释放缓存的方法

Linux手动释放缓存的方法

C++ 关于内存泄露问题。内存泄露是指用new 分配的内存没有用delete释放,如果未释放会有啥后果?

在 C 中释放内存需要啥?