在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式中是否使用動態內存?

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 作者:黃工的嵌入式技術 ? 2020-02-28 17:03 ? 次閱讀

所謂動態內存分配(Dynamic Memory Allocation)就是指在程序執行的過程中動態地分配或者回收存儲空間的分配內存的方法。

動態內存分配不像數組等靜態內存分配方法那樣需要預先分配存儲空間,而是由系統根據程序的需要即時分配,且分配的大小就是程序要求的大小。

關于靜態內存與動態內存

1.1、靜態和動態內存的特點
在探討這個問題之前我們先來對比下靜態內存和動態內存的特點:
1. 創建的時間不同:創建的時間不同:靜態分配發生在程序編譯和連接的時候。動態分配則發生在程序調入和執行的時候。

編譯鏈接過程中已經分配好的

代碼運行過程中使用rt_malloc分配:

1staticvoidonmessage_text(rws_socketsocket,constchar*text,constunsignedintlen) 2{ 3char*buff=RT_NULL; 4 5buff=(char*)rt_malloc(2048); 6 7rt_memset(buff,0x00,2048); 8rt_memcpy(buff,text,len); 9 10LOG_D("message(txt),%d(byte):%s",len,buff); 11 12if(buff!=RT_NULL) 13{ 14rt_free(buff); 15} 16}

2. 創建的空間不同:堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如局部變量的分配。動態分配由函數malloc進行分配。不過棧的動態分配和堆不同,他的動態分配是由編譯器進行釋放,無需我們手工實現。

1.2、靜態和動態內存的優缺點

在了解了靜態內存和動態內存不同的特點后可以分析出它們在不同的方面具有不同的優缺點:
1.靜態內存編譯階段就分配好了,不會存在分配失敗的情況,除非系統內存被分配完了,但是在編譯階段就可以查出。動態內存在運行中分配,在正常運行的情況下可能夠正常分配,在某種環境下可能分配失敗 ,這樣就對開發者的代碼水平要求更高,要求開發者需要對代碼的健壯性有要求。

2.靜態內存由于是編譯階段分配好的,而動態內存是由運行中分配,這樣動態內存可以被高效復用,當某段程序使用完畢后,可以將內存交換給內存池中等待下次程序的分配,由于這種機制,開發者可以利用更小的內存開發更大型的程序。

3. 動態內存由于是動態分配,所以涉及到分配和釋放的問題,假設X程序在分配了ABC3塊內存,程序執行完畢后AC區域內存被釋放,但是由于開發者的疏忽導致B區域的內存被遺留。而X程序又是會被反復調用的,這樣我們的內存區域由于有沒有釋放的區域導致每次調用就會占用一段區域,最終系統就沒有內存可以使用。這種情況一般在產品實際體現為最開始的時候設備正常工作,但是運行了幾個小時或者幾天后死機。這種情況一般被稱作內存泄漏(Memory Leak)。


4. 在嵌入式RTOS中線程函數中使用靜態內存,也就是在線程中定義局部變量,會加大線程棧空間的開銷。

裸機開發和RTOS開發的特點

1. 代碼規模:裸機開發的項目一般代碼規模都比較小,對于一般開發者都難于駕馭使用裸機開發超大規模項目,人力成本和時間成本都太高。反而由于RTOS的模塊化特性,更容易開發出代碼規模大的項目。


2. 系統穩定性:在機電,航空,汽車等行業都是需要高實時性、高穩定性和高安全性的。對于RTOS來說,系統任務的劃分調度都是系統管理,當開發者對其機制了解不清楚的情況下反而帶來了部分風險。

除此之外RTOS上的內存管理也是很大影響系統的,對于RTOS上一般不會存在MMU內存管理單元,也就代表大部分運行RTOS的芯片上都沒有虛擬地址映射,那么就無法利用物理地址和虛擬地址的特性進行內存整理,避免內存泄漏。所以說在RTOS動態內存這塊內存有風險。

嵌入式中是否應該使用動態內存

明白不同內存的優缺點和裸機RTOS的特點之后,我們在回頭來分析 “嵌入式中是否應該使用動態內存?”

在實時嵌入式系統中,由于系統軟件并不像PC上復雜,一般都是很簡單的內存使用,所以一般也不使用動態內存管理,但是隨著RTOS面臨的任務越來越重,尤其是IoTAIoT的到來,讓許多消費級產品運行的RTOS的負擔越來越重。

在這種情況下繼續使用靜態內存開發會極大的限制開發進度,整個開發的靈活性非常低。同時靜態的內存無法復用使用同一片內存區域,相比與動態內存在大型項目中一般會使用更多的內存,在內存大小不容樂觀的嵌入式系統是很難接受的。

但是針對一些高穩定性和高安全性的項目來說,使用動態內存就需要好好斟酌下,由于RTOS上基本沒有MMU的硬件支持或者是系統軟件支持,所以不可避免的系統中會出現內存碎片,從而有可能導致系統異常。最終說了這么多總結成以下幾點:
1. 沒有使用RTOS的項目:不建議使用動態內存,這種項目一般很簡單,不必使用動態內存增大系統開銷和復雜度。


2. 使用RTOS的消費級項目:建議使用動態內存,一般這種項目代碼復雜度比裸機高,合理使用動態內存會有效降低內存的開銷。同時很多Github項目的linux程序都是會使用內存管理,有這套機制能更加方便的移植代碼。


3. 使用RTOS的軍工、航天、醫療等高穩定性和高安全性項目:建議盡量降低對動態內存的使用與依賴以確保系統的穩定性。當然也不代表動態內存就無法在這些項目上使用,只是要求系統開發者對系統內存的把控要求更高。

RT-Thread的內存管理

RT-Thread 操作系統在內存管理上,根據上層應用及系統資源的不同,有針對性地提供了不同的內存分配管理算法。總體上可分為兩類:內存堆管理與內存池管理,而內存堆管理又根據具體內存設備劃分為三種情況:

第一種是針對小內存塊的分配管理(小內存管理算法);
第二種是針對大內存塊的分配管理(slab 管理算法);
第三種是針對多內存堆的分配情況(memheap 管理算法)。

小內存管理算法是一個簡單的內存分配算法。初始時,它是一塊大的內存。當需要分配內存塊時,將從這個大的內存塊上分割出相匹配的內存塊,然后把分割出來的空閑內存塊還回給堆管理系統中。每個內存塊都包含一個管理用的數據頭,通過這個頭把使用塊與空閑塊用雙向鏈表的方式鏈接起來。


RT-Thread 的 slab 分配器是在 DragonFly BSD 創始人 Matthew Dillon 實現的 slab 分配器基礎上,針對嵌入式系統優化的內存分配算法。最原始的 slab 算法是 Jeff Bonwick 為 Solaris 操作系統而引入的一種高效內核內存分配算法。

memheap 管理算法適用于系統含有多個地址可不連續的內存堆。使用 memheap 內存管理可以簡化系統存在多個內存堆時的使用:當系統中存在多個內存堆的時候,用戶只需要在系統初始化時將多個所需的 memheap 初始化,并開啟 memheap 功能就可以很方便地把多個 memheap(地址可不連續)粘合起來用于系統的 heap 分配。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5142

    文章

    19561

    瀏覽量

    315399
  • 動態內存
    +關注

    關注

    1

    文章

    25

    瀏覽量

    8089
  • 靜態內存
    +關注

    關注

    0

    文章

    6

    瀏覽量

    1453
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    如何使用LAX_CODEGEN啟用動態內存分配?

    我目前正在探索NXP_MBDToolbox_LAX。lax_codegen 生成的代碼基于靜態分配。我想管理大型向量,如何使用 LAX_CODEGEN 啟用動態內存分配?
    發表于 04-10 08:09

    Python在嵌入式系統的應用場景

    你想把你的職業生涯提升到一個新的水平?Python在嵌入式系統中正在成為一股不可缺少的新力量。盡管傳統上嵌入式開發更多地依賴于C和C++語言,Python的優勢在于其簡潔的語法、豐富的庫和快速的開發周期,這使得它在某些嵌入式場景
    的頭像 發表于 03-19 14:10 ?554次閱讀

    嵌入式系統的代碼優化與壓縮技術

    在當今數字化時代,嵌入式系統廣泛應用于各個領域,從智能家居設備到工業控制系統,從汽車電子到可穿戴設備,它們無處不在。而在嵌入式系統開發,代碼優化與壓縮技術至關重要,直接影響著系統的性能、成本
    發表于 02-26 15:00

    如何提高嵌入式代碼質量?

    有著明顯的區別,主要體現在以下幾個方面: 1. 資源受限:嵌入式系統通常具有有限的內存和處理能力,因此代碼效率和內存占用是關鍵考量因素。 2. 實時性要求:某些嵌入式系統需要實時響應,
    發表于 01-15 10:48

    嵌入式主板的概述與發展

    隨著科技的迅猛發展,嵌入式系統在現代電子產品扮演著越來越重要的角色。嵌入式主板作為嵌入式系統的核心組件之一,承擔著控制、處理和通訊等多種功能。本文將對
    的頭像 發表于 01-13 16:30 ?706次閱讀
    <b class='flag-5'>嵌入式</b>主板的概述與發展

    新手怎么學嵌入式?

    嵌入式系統的發展,嵌入式操作系統也變得越來越重要。學習嵌入式操作系統可以幫助你更好地管理嵌入式系統的資源和任務。了解操作系統的任務調度、
    發表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指將人工智能技術應用于嵌入式系統的一種技術。嵌入式系統是嵌入到其他設備或系統
    的頭像 發表于 12-11 09:23 ?895次閱讀
    什么是<b class='flag-5'>嵌入式</b>人工智能

    嵌入式系統開發與硬件的關系 嵌入式系統開發常見問題解決

    嵌入式系統開發與硬件的關系 嵌入式系統是專為特定應用設計的計算機系統,它們通常嵌入在所控制的設備。這些系統的關鍵特點是它們與硬件的緊密集成,這意味著軟件必須為特定的硬件平臺量身定制。
    的頭像 發表于 12-09 09:38 ?868次閱讀

    mmc卡在嵌入式系統的使用

    隨著科技的發展,嵌入式系統在我們的日常生活扮演著越來越重要的角色。從智能手機到家用電器,再到工業控制系統,嵌入式系統無處不在。存儲設備作為嵌入式系統
    的頭像 發表于 11-25 09:58 ?958次閱讀

    什么是嵌入式?一文讀懂嵌入式主板

    在現代科技浪潮嵌入式技術已成為支撐各種智能設備和系統運行的核心力量。那么,究竟什么是嵌入式嵌入式系統,顧名思義,是將計算機的硬件和軟件嵌入
    的頭像 發表于 10-16 10:14 ?2477次閱讀

    【「嵌入式Hypervisor:架構、原理與應用」閱讀體驗】+全文學習心得

    降低了虛擬機之間的耦合性,提高了系統的可靠性和安全性。 在學習過程,我深刻體會到嵌入式Hypervisor的核心價值在于其靈活性和可擴展性。它能夠根據實際應用需求,動態地調整資源配置,滿足不同應用場
    發表于 10-09 19:11

    嵌入式主板是什么意思?嵌入式主板全面解析

    嵌入式主板,通常被稱為嵌入式系統的核心組件,是一種用于控制和數據處理的計算機硬件,其設計旨在嵌入特定設備執行專門任務。嵌入式主板如同是設備
    的頭像 發表于 09-30 10:05 ?1527次閱讀

    嵌入式常用數據結構有哪些

    嵌入式編程,數據結構的選擇和使用對于程序的性能、內存管理以及開發效率都具有重要影響。嵌入式系統由于資源受限(如處理器速度、內存大小等),
    的頭像 發表于 09-02 15:25 ?963次閱讀

    嵌入式系統的實時操作系統

    嵌入式RTOS是嵌入式應用程序運行、相互交互和與外界通信的底層軟件機制。在本節,您將了解嵌入式軟件開發人員使用哪些流行RTOS以及它們運行的嵌入式
    的頭像 發表于 08-20 11:28 ?804次閱讀

    機器視覺在嵌入式的應用

    機器視覺在嵌入式系統的應用是一個廣泛而深入的話題,涉及到許多不同的領域和技術。 機器視覺在嵌入式系統的應用 1. 引言 機器視覺是一種模擬人類視覺系統的功能,通過圖像采集、處理和分
    的頭像 發表于 07-16 10:30 ?910次閱讀
    主站蜘蛛池模板: 天天插夜夜操 | 欧美乱理伦另类视频 | 分分精品| 亚洲高清视频一区 | 女人张开腿等男人桶免费视频 | 一级aa 毛片高清免费看 | 57pao成人永久免费视频 | 欧美福利视频网 | 亚洲免费在线看 | 亚洲一区视频在线 | 中国高清色视频www 中国高清性色生活片 | 亚洲jizzjizz妇女 | 三级不卡| 色视频免费观看 | 成人欧美一区二区三区视频不卡 | 99久久国产免费 - 99久久国产免费 | 国产成人啪精品午夜在线观看 | 三级成人影院 | 国产成人精品亚洲日本在线观看 | 黄色录像日本 | 丁香婷婷九月 | 久久久久国产一级毛片高清版 | 国产午夜毛片v一区二区三区 | 午夜视频在线观看免费高清 | 国产精品黄网站免费进入 | 亚洲影院手机版777点击进入影院 | 中文字幕不卡在线播放 | 国产精品乱码高清在线观看 | 日本不卡高清视频 | 亚洲国产视频网 | 丁香啪啪天堂激情婷婷 | 国语一级毛片私人影院 | aaaaa毛片 | chinesevideo普通话对白 | 华人被黑人粗大猛然进 | 啪啪免费看视频 | 2021国产成人精品国产 | 午夜爽爽视频 | 日本高清加勒比 | 久草男人天堂 | 亚洲乱亚洲乱妇13p 亚洲免费mv |