講解Linux中的內存管理
對于那些想了解Linux的人,這里介紹動態內存管理的一些東西。Linux的源代碼是開放的,任何人都可以獲取并修改,用之開發自己的產品。人們已成功使Linux運行于數百種硬件平臺之上。良好的操作系統性能部分依賴于操作系統有效管理資源的能力。
在過去,堆內存管理器是實際的規范,但是其性能會受到內存碎片和內存回收需求的影響。現在,Linux® 內核使用了源自于 Solaris 的一種方法,但是這種方法在嵌入式系統中已經使用了很長時間了,它是將內存作為對象按照大小進行分配。
動態內存管理
內存管理的目標是提供一種方法,為實現各種目的而在各個用戶之間實現內存共享。內存管理方法應該實現以下兩個功能:
最小化管理內存所需的時間
***化用于一般應用的可用內存(最小化管理開銷)
內存管理實際上是一種關于權衡的零和游戲。您可以開發一種使用少量內存進行管理的算法,但是要花費更多時間來管理可用內存。也可以開發一個算法來有效地管理內存,但卻要使用更多的內存。最終,特定應用程序的需求將促使對這種權衡作出選擇。
每個內存管理器都使用了一種基于堆的分配策略。在這種方法中,大塊內存(稱為 堆)用來為用戶定義的目的提供內存。當用戶需要一塊內存時,就請求給自己分配一定大小的內存。堆管理器會查看可用內存的情況(使用特定算法)并返回一塊內存。搜索過程中使用的一些算法有 first-fit(在堆中搜索到的***個滿足請求的內存塊)和 best-fit(使用堆中滿足請求的最合適的內存塊)。當用戶使用完內存后,就將內存返回給堆。
這種基于堆的分配策略的根本問題是碎片(fragmentation)。當內存塊被分配后,它們會以不同的順序在不同的時間返回。這樣會在堆中留下一些洞,需要花一些時間才能有效地管理空閑內存。這種算法通常具有較高的內存使用效率(分配需要的內存),但是卻需要花費更多時間來對堆進行管理。
另外一種方法稱為 buddy memory allocation,是一種更快的內存分配技術,它將內存劃分為 2 的冪次方個分區,并使用 best-fit 方法來分配內存請求。當用戶釋放內存時,就會檢查 buddy 塊,查看其相鄰的內存塊是否也已經被釋放。如果是的話,將合并內存塊以最小化內存碎片。這個算法的時間效率更高,但是由于使用 best-fit 方法的緣故,會產生內存浪費。
以上就是動態內存管理介紹。
【編輯推薦】