日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

eheap嵌入式堆的配置

星星科技指導(dǎo)員 ? 來(lái)源:嵌入式計(jì)算設(shè)計(jì) ? 作者:Micro Digital ? 2022-06-22 10:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

許多嵌入式系統(tǒng)不使用堆。許多確實(shí)使用堆的人使用必須按順序搜索的串行堆,因此可能非常慢。大多數(shù)其他嵌入式系統(tǒng)可能使用廣泛可用的dlmalloc,它以無(wú)法更改的固定結(jié)構(gòu)為代價(jià)提供快速操作。

一個(gè)名為eheap的新嵌入式堆在這些極端情況之間提供了一個(gè)中間地帶。它為在 RTOS 上運(yùn)行或獨(dú)立運(yùn)行的嵌入式系統(tǒng)提供高性能、適應(yīng)性和安全性。eheap 旨在為特定的嵌入式系統(tǒng)輕松定制。它符合 malloc()、free()、realloc() 和 calloc() 的 ANSI C 標(biāo)準(zhǔn),并為堆控制和安全提供附加功能。

這是關(guān)于 eheap 的三篇文章系列中的第一篇:

? eheap 第 1 部分:配置

? eheap 第 2 部分:增強(qiáng)調(diào)試

? eheap 第 3 部分:自我修復(fù)

eheap 是一種 bin 類(lèi)型的堆,類(lèi)似于 dlmalloc。假設(shè)讀者熟悉這種類(lèi)型的堆結(jié)構(gòu),或者對(duì)這些堆如何操作的細(xì)節(jié)不感興趣。因此,這篇文章和后續(xù)文章將討論 eheap 的獨(dú)特之處,而不是它的工作原理。對(duì)于那些想要更詳細(xì)信息的人,請(qǐng)參閱eheap 與 dlmalloc。

嵌入式系統(tǒng)特性

eheap 設(shè)計(jì)用于以下方面:

? 范圍廣泛的 RAM 大小,從非常小到大。

? 預(yù)計(jì)永遠(yuǎn)運(yùn)行。

? 需要高性能和確定性操作。

? 高優(yōu)先級(jí)任務(wù)必須能夠搶占并快速運(yùn)行。

? 小代碼量通常是必要的。

? 每個(gè)嵌入式系統(tǒng)的堆要求范圍相對(duì)較窄。

? 嵌入式系統(tǒng)有大量空閑時(shí)間。

? 嵌入式系統(tǒng)對(duì)自我修復(fù)的需求不斷增長(zhǎng)。

bin 配置

與其他 bin 類(lèi)型的堆一樣,eheap 有一個(gè)用于小塊的小型 bin 數(shù)組 (SBA) 和一個(gè)用于大塊的上部 bin 數(shù)組 (UBA)。SBA 就像一組塊池,但速度不快。與 dlmalloc 不同,UBA 中的 bin 大小是連續(xù) 2 字節(jié)的冪(256、512 等),eheap 允許選擇 bin 大小以適合應(yīng)用程序。eheap bin 大小由一個(gè)恒定的bin 大小數(shù)組確定,由程序員指定。對(duì)于小 bin,bin 大小是 bin 的塊大小。[1] 對(duì)于大 bin,bin 大小是 bin 中的最小塊大小。一個(gè) bin 的最大塊大小是下一個(gè) bin 的大小 – 8.[2]

為了安全起見(jiàn),bin 大小數(shù)組可以位于 ROM 中,也可以位于本地 RAM 中以獲得更高的性能。堆初始化函數(shù)使用它來(lái)創(chuàng)建 eheap 所需的 bin 和所有相關(guān)變量??梢酝ㄟ^(guò)更改 bin 大小數(shù)組中的值、重新編譯和重新啟動(dòng)應(yīng)用程序來(lái)快速重新配置堆。這種快速重新配置支持一種啟發(fā)式方法來(lái)調(diào)整 eheap 以獲得特定系統(tǒng)的最佳性能。

小型系統(tǒng)示例

小型系統(tǒng)可能有一個(gè) bin 大小的數(shù)組,如圖 1 所示。

pYYBAGKyhAGAc-AEAABZzyaIZak584.png

[圖 1]

對(duì)于這個(gè)系統(tǒng),SBA 由 bin 0、1 和 2 組成,分別保存大小為 24、32 和 40 的塊;bin3 包含從 48 到 120 的 10 個(gè)尺寸;bin4 是一個(gè)只包含大小為 128 的小 bin;bin 5 包含從 136 到 248 的 14 個(gè)尺寸;和 bin6 ,頂部 bin,包含從 264 開(kāi)始的所有大小。-1 標(biāo)記大小數(shù)組的結(jié)尾。在這個(gè)特定的嵌入式系統(tǒng)中,對(duì)小塊的需求是有限的,對(duì)中等塊有一些需求,而對(duì) 264 字節(jié)以上的大塊的需求很少。請(qǐng)注意,為 128 字節(jié)的塊添加了一個(gè)小 bin,這些塊在此系統(tǒng)中經(jīng)常使用。

上垃圾箱搜索

eheap 和 dlmalloc 在 SBA 方面是相似的。兩者都針對(duì)非??焖俚脑L問(wèn)進(jìn)行了優(yōu)化,這是面向?qū)ο蟪绦蛲ǔP枰?。主要區(qū)別在于 UBA,其中 dlmalloc 在 free() 操作期間構(gòu)建樹(shù)以指導(dǎo) malloc() 操作期間的最佳分配。樹(shù)節(jié)點(diǎn)鏈接巧妙地存儲(chǔ)在塊本身中。

對(duì)于 eheap,每個(gè) bin 都有一個(gè)適合該 bin 的空閑塊列表。在 free() 操作期間,如果塊大于 bin 的第一個(gè)塊,則將其放在 bin 空閑列表的末尾;否則,將其放在 bin 空閑列表的開(kāi)頭。在空閑時(shí)間,大的 bin 空閑列表按增加的塊大小進(jìn)行排序。在 malloc() 操作期間,會(huì)在大的 bin 空閑列表中搜索第一個(gè)足夠大的塊,這也是最合適的。

eheap 最適合具有偏好塊大小并且不使用廣泛的塊大小的系統(tǒng)。如上例所示,可以在 UBA 中放入一個(gè)小 bin 以提供常用尺寸。實(shí)現(xiàn)此結(jié)果的另一種方法是使大的 bin 大小等于經(jīng)常使用的塊大小。那么最適合的將始終是 bin 中的第一個(gè)塊,然后是更大的尺寸。

在某種程度上,大型垃圾箱就像已排序的迷你串行堆一樣運(yùn)行。過(guò)多的搜索時(shí)間可能會(huì)受到箱大小與系統(tǒng)需求的明智選擇以及對(duì)合并的明智使用的限制,如下所述。堆設(shè)計(jì)的一個(gè)原則是處理更大的塊需要更長(zhǎng)的時(shí)間,因此更長(zhǎng)的 malloc() 時(shí)間不會(huì)降低平均性能。當(dāng)然, malloc() 不能花費(fèi)太長(zhǎng)時(shí)間以致更高優(yōu)先級(jí)的任務(wù)錯(cuò)過(guò)它們的截止日期。

圖 2 顯示了一個(gè) bin 堆示例。

pYYBAGKyhAiAE8Q1AAAX3WGbKqo284.png

【圖2】

在這種情況下,沒(méi)有SBA也沒(méi)有UBA,只有top bin。此堆接近串行類(lèi)型堆,但仍比它具有優(yōu)勢(shì)。

圖 3 顯示了一個(gè)沒(méi)有 SBA 堆的示例。

pYYBAGKyhA-ACI42AAA2dJGeeds495.png

[圖 3]

用 C 編寫(xiě)的嵌入式系統(tǒng)可能對(duì)小塊幾乎沒(méi)有用處,或者,塊池可能更適合特定系統(tǒng)中的小塊。在這種情況下,bin 0 以 24 開(kāi)頭,因?yàn)楸仨毟采w 24 字節(jié)及以上的所有大小,但 bin 0 可能僅用于 64 字節(jié)及更大的塊。 [3]

圖 4 顯示了一個(gè)沒(méi)有 UBA 堆的示例。

pYYBAGKyhBWAJZukAABbZhFogQI272.png

[圖 4]

在這個(gè)堆中,SBA 覆蓋大小為 24 到 64 的塊,所有其他塊進(jìn)入 bin 6,覆蓋 72 個(gè)字節(jié)及以上。

幾乎無(wú)限的堆配置是可能的。目前,為了獲得最佳性能,eheap 限制為 32 個(gè) bin。如果更多的 bin 被證明對(duì)某些嵌入式系統(tǒng)有益,則可以增加此限制。

Donor chunk

eheap 有一個(gè)可選的donor chunk (dc),它類(lèi)似于dlmalloc 的指定犧牲塊(dvc),但操作方式不同并且服務(wù)于不同的目的:

? 快速小塊分配的初始源。

? 將小塊分離到下堆,將大塊分離到上堆。

? 基于緩存的系統(tǒng)的小塊本地化。

如果啟用,則 dc 的空間將由程序員在頂部塊 (tc) 下方分配。通常,它只是總初始可用空間的一小部分,它是 dc 和 tc 的組合。如果用于分配小塊的選定 SBA 箱為空,則從 dc 中分割該塊,而不是從下一個(gè)較大的占用箱中取出它。這不僅更快,而且還避免了減少更大的垃圾箱。由于 dc 最初是堆的較低部分,因此小塊將來(lái)自較低的堆。這改善了小塊分配的本地化,并且還傾向于按塊大小隔離堆,以幫助減少使用中的小塊,以免阻塞大塊的合并。

在堆使用一段時(shí)間后,小塊分配將主要來(lái)自 SBA 箱,很少來(lái)自 dc。此時(shí)可以關(guān)閉使用 dc 并將剩余的內(nèi)容釋放到垃圾箱中。或者,可以繼續(xù)使用 dc。當(dāng)下面和相鄰的已釋放塊合并到其中時(shí),它會(huì)增長(zhǎng),并且隨著從中分配塊,它會(huì)縮小。這將提高空 SBA 箱的性能。

塊合并和泄漏箱

dlmalloc 和 eheap 之間的一個(gè)重要區(qū)別是 dlmalloc 總是合并相鄰的空閑塊,而 eheap 允許延遲合并。eheap 合并由其cmerge 模式控制,應(yīng)用程序可以打開(kāi)或關(guān)閉該模式。在堆初始化之后它是關(guān)閉的。

延遲合并的原因是塊合并會(huì)產(chǎn)生泄漏的 bin。例如,假設(shè)一個(gè) 24 字節(jié)的塊被釋放到 bin 0,而物理上相鄰的 48 字節(jié)的空閑塊駐留在 bin 3。如果啟用合并,這些塊將被合并成一個(gè) 72 字節(jié)的塊,該塊將被放入bin 6。如果應(yīng)用程序需要 24 和 48 字節(jié)的塊而不是 72 字節(jié)的塊,這不利于獲得最佳性能。此外,在 free() 操作期間,將 48 字節(jié)塊出列并合并它需要額外的時(shí)間。如果后續(xù) malloc() 獲取 72 字節(jié)塊,將其拆分為 24 和 48 字節(jié)塊以獲取其中任何一個(gè),然后將剩余部分重新排隊(duì),則這是浪費(fèi)時(shí)間。

與可能使用多種塊大小的一般處理不同,嵌入式系統(tǒng)傾向于使用有限的塊大小。因此,泄漏箱對(duì)于嵌入式系統(tǒng)來(lái)說(shuō)不是最佳的。

cmerge可以直接控制也可以自動(dòng)控制。如果自動(dòng)模式amerge為 ON,則當(dāng)可用空間低于下限時(shí), cmerge 將打開(kāi),當(dāng)可用空間高于上限時(shí),它將關(guān)閉。限制由配置常數(shù)決定。或者,可以使用空閑塊的數(shù)量、平均空閑塊大小或 bin 中的總空間,這取決于在特定系統(tǒng)中最有效的方法。

概括

eheap 是一種新的嵌入式堆,可以通過(guò)調(diào)整 bin 大小數(shù)組,決定是否使用 dc 以及它應(yīng)該多大,以及決定是否使用延遲合并以及如果使用,如何控制它。這些選項(xiàng)允許將eheap調(diào)整到特定系統(tǒng),以實(shí)現(xiàn)最佳系統(tǒng)性能,而不會(huì)出現(xiàn)碎片導(dǎo)致分配失敗。eheap 可免費(fèi)用于非商業(yè)用途。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5210

    文章

    20700

    瀏覽量

    337682
  • RTOS
    +關(guān)注

    關(guān)注

    25

    文章

    871

    瀏覽量

    123245
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    飛凌嵌入式亮相德國(guó)紐倫堡embedded world 2026,深耕全球嵌入式AI市場(chǎng)!

    2026年3月10日,全球嵌入式技術(shù)領(lǐng)域的年度盛會(huì)——embedded world 2026國(guó)際嵌入式展覽會(huì),在德國(guó)紐倫堡會(huì)展中心盛大啟幕。飛凌嵌入式攜多款重磅新品及全場(chǎng)景解決方案再一次隆重參展
    的頭像 發(fā)表于 03-11 16:37 ?1.1w次閱讀
    飛凌<b class='flag-5'>嵌入式</b>亮相德國(guó)紐倫堡embedded world 2026,深耕全球<b class='flag-5'>嵌入式</b>AI市場(chǎng)!

    嵌入式驅(qū)動(dòng)開(kāi)發(fā),需要掌握哪些技能?

    有經(jīng)驗(yàn)的老司機(jī)都知道,做嵌入式驅(qū)動(dòng)開(kāi)發(fā)需要掌握一系列的技能,包含編程、硬件、操作系統(tǒng)、調(diào)試等多個(gè)方面。 1、硬件知識(shí)熟悉原理圖:能看懂原理圖以及各種元器件的含義,以及PCB布局等。 了解
    發(fā)表于 01-20 16:46

    什么是嵌入式應(yīng)用開(kāi)發(fā)?

    概述 所謂的嵌入式應(yīng)用開(kāi)發(fā)就是在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā)、軟硬件綜合開(kāi)發(fā) ?嵌入式應(yīng)用開(kāi)發(fā)?是指在嵌入式操作系統(tǒng)下進(jìn)行開(kāi)發(fā),包括系統(tǒng)化設(shè)計(jì)指導(dǎo)下的硬件和軟件綜合研發(fā)。
    發(fā)表于 01-12 16:13

    淺淺問(wèn)一下,嵌入式端是用protobuf?

    ——嵌入式那點(diǎn)內(nèi)存,動(dòng)不動(dòng)就幾 KB 幾十 KB 的 RAM,你 protobuf 解出來(lái)那一動(dòng)態(tài)分配、嵌套消息,稍不留神棧就溢出了,也 fragmentati
    的頭像 發(fā)表于 12-17 10:16 ?321次閱讀
    淺淺問(wèn)一下,<b class='flag-5'>嵌入式</b>端是用protobuf?

    系統(tǒng)嵌入式的學(xué)習(xí)路線

    嵌入式技術(shù)是各種電子產(chǎn)品的核心技術(shù),也是工業(yè)4.0、遠(yuǎn)程醫(yī)療、3D打印等新興產(chǎn)業(yè)的核心技術(shù),具有廣闊的發(fā)展前景。很多計(jì)算機(jī)、電子信息類(lèi)專(zhuān)業(yè)的學(xué)生都想把嵌入式開(kāi)發(fā)作為自己的職業(yè)目標(biāo),但是因?yàn)?b class='flag-5'>嵌入式涉及
    發(fā)表于 12-16 07:49

    嵌入式與FPGA的區(qū)別

    \"嵌入式開(kāi)發(fā)門(mén)檻低、就業(yè)廣,適合轉(zhuǎn)行;FPGA技術(shù)深、薪資高,但要求學(xué)歷和數(shù)學(xué)功底。選哪個(gè)?看你的基礎(chǔ)和職業(yè)目標(biāo)。\" ?我們先來(lái)明白下兩者區(qū)別在哪? ?1、嵌入式:分兩部分
    發(fā)表于 11-20 07:12

    嵌入式和FPGA的區(qū)別

    ,芯片內(nèi)部的門(mén)電路連接在出廠時(shí)就已固定,無(wú)法更改,它們的功能是通過(guò)軟件編程也就是嵌入式軟件來(lái)實(shí)現(xiàn)的。 FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列) 則是一種可編程邏輯器件,其硬件結(jié)構(gòu)可以通過(guò)編程來(lái)配置,實(shí)現(xiàn)各種
    發(fā)表于 11-19 06:55

    嵌入式系統(tǒng)的定義和應(yīng)用領(lǐng)域

    在一起,共同構(gòu)成了一個(gè)高效、穩(wěn)定的工作系統(tǒng)。 其實(shí),嵌入式系統(tǒng)的概念與個(gè)人PC有著相似的底層邏輯。單片機(jī),作為單個(gè)芯片上的計(jì)算機(jī)系統(tǒng),其定義明確且獨(dú)特。盡管不同的單片機(jī)在配置、性能、廠家以及指令集
    發(fā)表于 11-17 06:49

    嵌入式需要掌握哪些核心技能?

    )。 企業(yè)需求:招聘崗位中,C語(yǔ)言是100%必備技能,C++和匯編語(yǔ)言的需求隨項(xiàng)目復(fù)雜度提升。 2)嵌入式硬件架構(gòu) 主流平臺(tái):ARM Cortex-M/A系列、RISC-V內(nèi)核,需掌握寄存器配置、時(shí)鐘
    發(fā)表于 10-21 16:25

    恩智浦配置工具助力嵌入式系統(tǒng)設(shè)計(jì)

    設(shè)計(jì)嵌入式系統(tǒng)需要硬件和軟件之間的無(wú)縫協(xié)調(diào)。恩智浦配置工具是一款全面且用戶友好的解決方案,旨在幫助開(kāi)發(fā)人員簡(jiǎn)化系統(tǒng)設(shè)置流程,加快開(kāi)發(fā)進(jìn)程并減少潛在錯(cuò)誤。
    的頭像 發(fā)表于 09-22 16:37 ?2112次閱讀

    嵌入式達(dá)到什么水平才能就業(yè)?

    :包括GPIO、定時(shí)器、中斷、ADC 等外設(shè)的配置與調(diào)試,能實(shí)現(xiàn)如溫濕度采集、電機(jī)控制等功能掌握嵌入式 Linux 驅(qū)動(dòng)開(kāi)發(fā)基礎(chǔ):能編寫(xiě)簡(jiǎn)單字符設(shè)備驅(qū)動(dòng),實(shí)現(xiàn)設(shè)備的初始化、讀寫(xiě)操作,會(huì)用內(nèi)核調(diào)試
    發(fā)表于 09-15 10:20

    嵌入式 STM32 零基礎(chǔ)入門(mén):「降維打擊學(xué)習(xí)法」適配零基礎(chǔ),高效進(jìn)階全棧工程師

    “黑盒子”,芯片內(nèi)部的工作原理,看不見(jiàn),摸不著,全靠死記硬背,抽象難理解!其次,嵌入式知識(shí)體系龐雜,只懂軟件或只懂硬件,缺乏全流程系統(tǒng)認(rèn)知,知識(shí)碎片化!理論學(xué)一
    的頭像 發(fā)表于 08-25 15:24 ?898次閱讀
    <b class='flag-5'>嵌入式</b> STM32 零基礎(chǔ)入門(mén):「降維打擊<b class='flag-5'>式</b>學(xué)習(xí)法」適配零基礎(chǔ),高效進(jìn)階全棧工程師

    AMD 2025.1版嵌入式軟件和工具的新增功能

    AMD 2025.1 版嵌入式軟件和工具是面向新一代嵌入式系統(tǒng)開(kāi)發(fā)而打造的綜合平臺(tái),全面加速概念構(gòu)想到部署落地。
    的頭像 發(fā)表于 08-15 15:32 ?1487次閱讀

    Linux嵌入式和單片機(jī)嵌入式的區(qū)別?

    Linux嵌入式與單片機(jī)嵌入式在多個(gè)方面存在顯著的區(qū)別,以下是詳細(xì)的比較和歸納: 一、基本概念 1. Linux嵌入式: 定義:將Linux操作系統(tǒng)運(yùn)行在嵌入式設(shè)備上的一種
    發(fā)表于 06-20 09:46

    嵌入式開(kāi)發(fā)入門(mén)指南:從零開(kāi)始學(xué)習(xí)嵌入式

    隨著物聯(lián)網(wǎng)、智能硬件的發(fā)展,嵌入式開(kāi)發(fā)成為熱門(mén)技能之一。以下將為初學(xué)者提供一份詳細(xì)的嵌入式開(kāi)發(fā)入門(mén)指南,涵蓋學(xué)習(xí)路徑、必備工具、推薦資源等內(nèi)容。 1. 嵌入式系統(tǒng)的定義與應(yīng)用嵌入式系統(tǒng)
    發(fā)表于 05-15 09:29
    梅河口市| 瑞昌市| 通渭县| 纳雍县| 鄄城县| 抚远县| 台州市| 泰和县| 周至县| 广西| 深圳市| 济源市| 江陵县| 阿克陶县| 彭州市| 乾安县| 厦门市| 乌苏市| 紫阳县| 多伦县| 保山市| 苍南县| 通道| 招远市| 华阴市| 陕西省| 印江| 凭祥市| 朔州市| 德令哈市| 新营市| 泰兴市| 徐州市| 甘孜县| 于都县| 聂荣县| 奉化市| 武鸣县| 班戈县| 嘉荫县| 宁都县|