日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

TLSF算法分析(内存分配算法详解)

發(fā)布時間:2023/12/24 综合教程 55 生活家
生活随笔 收集整理的這篇文章主要介紹了 TLSF算法分析(内存分配算法详解) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

注:本文的大部分內(nèi)容摘錄自論文《TLSF: a New Dynamic Memory Allocator for Real-Time Systems》,可以通過“科學(xué)上網(wǎng)”訪問如下鏈接閱讀原文:http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf。

什么是TLSF

TLSF是Two Level Segregated Fit memory allocator的縮寫,是一種動態(tài)內(nèi)存分配算法。名稱中有兩個關(guān)鍵詞,Segregated Fit和Two Level。

首先我們來了解什么是Segregated Fit。在內(nèi)存分配算法中,空閑內(nèi)存塊的管理是算法的核心。根據(jù)尋找空閑內(nèi)存塊的策略,可以將內(nèi)存分配算法分為以下幾種:

  • Sequential Fit:將所有的空閑內(nèi)存塊,放入到一個單向/雙向鏈表中。這是最基礎(chǔ)的管理策略。算法非常簡單,但尋找空閑內(nèi)存塊的效率依賴于鏈表的大小。
  • Segregated Fit:將所有的空閑塊,放入到一組鏈表中,每一個鏈表中只包含某一個大小范圍的空閑塊。例如最典型的dlmalloc算法。
  • Buddy System: Segregate Fit算法的變種,具有更好的切割和合并效率,又很多變種,如Binary Buddies,F(xiàn)ibonacci Buddies, Weighted Buddies等。通常這類算法的內(nèi)部碎片化問題比較嚴(yán)重。
  • Indexed Fit:通過一些高階的數(shù)據(jù)結(jié)構(gòu)來索引(Index)空閑的內(nèi)存塊。例如基于平衡樹的“Best Fit”算法。
  • Bitmap Fit: Indexed Fit算法的變種,通過一小段內(nèi)存的位圖來標(biāo)記對應(yīng)的內(nèi)存是空閑的還是使用中。

所以TLSF是一種通過一組鏈表來管理不同大小內(nèi)存塊的內(nèi)存分配算法。

為什么稱為Two Level?

基本的Segregated Fit算法是使用一組鏈表,每個鏈表只包含特定長度范圍來的空閑塊的方式來管理空閑塊的,這樣鏈表數(shù)組的長度可能會很大。如下圖,TLSF為了簡化查找定位過程,使用了兩層鏈表。第一層,將空閑內(nèi)存塊的大小根據(jù)2的冪進(jìn)行分類,如(16、32、64…)。第二層鏈表在第一層的基礎(chǔ)上,按照一定的間隔,線性分段。比如2的6次方這一段,分為4個小區(qū)間【64,80),【80,96),【96,112),【112,128).每一級的鏈表都有一個bitmap用于標(biāo)記對應(yīng)的鏈表中是否有內(nèi)存塊。比如第一級別bitmap的后4bit位0100,即2的6次方這個區(qū)間有空閑塊。對應(yīng)的第二級鏈表的bitmap位0010及【80,96)這個區(qū)間有空閑塊,即下面的89 Byte。

給定一個內(nèi)存塊的大小,確定在兩級鏈表中的位置(f,s)的算法如下:

其中2的SLI次冪表示第二級鏈表的區(qū)間大小,比如上圖中,區(qū)間大小為16,即2的4次方。這樣大小為460字節(jié)的空閑快在鏈表中的位置為f=8,s=12,如下圖:

TLSF適用環(huán)境

實(shí)時系統(tǒng)RTOS對內(nèi)存分配算法有以下兩個要求:

  • 內(nèi)存分配/釋放的執(zhí)行時間可預(yù)期,可接受的。由于RTOS對指令的執(zhí)行時間有嚴(yán)格要求,所以常常采用靜態(tài)內(nèi)存分配的方法,以獲得一個可以預(yù)期的執(zhí)行時間。
  • 內(nèi)存分配算法的碎片化程度要低,這是由于RTOS往往長時間執(zhí)行,碎片化程度高會導(dǎo)致內(nèi)存分配失敗。

TLSF算法的目標(biāo)運(yùn)行系統(tǒng)是:

  • 可信的執(zhí)行環(huán)境,Trusted Environment,應(yīng)用不會故意破壞數(shù)據(jù)或者竊取數(shù)據(jù)。
  • 有限的物理內(nèi)存。
  • 沒有物理MMU來支持虛擬內(nèi)存。

為了在這樣的環(huán)境下運(yùn)行,TLSF算法使用了如下的策略:

  • Immediate coalescing,立即合并,當(dāng)內(nèi)存塊被釋放后,立即與相鄰的空閑內(nèi)存塊合并,以獲得一個更大的空閑塊,插入到鏈表的相應(yīng)位置。這樣可以減少碎片化。
  • Splitting threshold,分割閾值,最小可分配的內(nèi)存塊大小為16字節(jié),應(yīng)用一般不會分配一些基本的數(shù)據(jù)結(jié)構(gòu),如int、char等。限定最小可分配大小為16字節(jié),這樣可以在空閑的內(nèi)存塊中存儲一些管理信息。
  • Good-fit strategy,TLSF會盡可能的返回一個最小的、能夠滿足需求的內(nèi)存塊。
  • Same strategy for all block sizes,對于不同大小的內(nèi)存請求,TLSF只有一個分配策略,實(shí)現(xiàn)相對簡單,執(zhí)行時間可以預(yù)期。相應(yīng)的dlmalloc根據(jù)所請求的內(nèi)存大小不同,有多達(dá)4種內(nèi)存分配策略。
  • Memory is not cleaned-up,分配個應(yīng)用的內(nèi)存沒有被請0.

TLSF的特點(diǎn)在于:

  • 可以預(yù)期的分配執(zhí)行時間,無論對于多達(dá)的內(nèi)存分配請求,TLSF可以在限定的時間內(nèi)完成分配。
  • 碎片化程度低。

未完待續(xù)

總結(jié)

以上是生活随笔為你收集整理的TLSF算法分析(内存分配算法详解)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。