色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

靜、動態內存的優劣比較

RTThread物聯網操作系統 ? 來源:YXQ ? 2019-08-06 18:25 ? 次閱讀

關于靜態內存與動態內存

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

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

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

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 管理算法)。

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

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

    關注

    1

    文章

    24

    瀏覽量

    7996
  • 靜態內存
    +關注

    關注

    0

    文章

    5

    瀏覽量

    1395

原文標題:嵌入式中是否應該使用動態內存?

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    串聯電路與并聯電路的優劣比較

    串聯電路與并聯電路各有其優劣,具體如下: 串聯電路的優勢: 電流相同:串聯電路中,流過每個元件的電流是相同的,這使得在需要控制電流的應用中很有用。 簡化電路設計:在某些情況下,串聯電路的設計和實現
    的頭像 發表于 12-02 17:32 ?1070次閱讀

    Prolith和HyperLith的優劣

    Prolith和HyperLith在光刻領域的優劣勢,可以展開討論討論
    發表于 11-29 22:12

    DDR內存與SDRAM的區別 DDR4內存與DDR3內存哪個好

    DDR內存與SDRAM的區別 1. 定義與起源 SDRAM (Synchronous Dynamic Random Access Memory) :同步動態隨機存取存儲器,是一種早期的內存技術,它與
    的頭像 發表于 11-29 14:57 ?823次閱讀

    DDR內存的工作原理與結構

    DDR內存,全稱為Double Data Rate Synchronous Dynamic Random Access Memory(雙倍數據速率同步動態隨機存取內存),是一種用于計算機和其他
    的頭像 發表于 11-20 14:32 ?722次閱讀

    Linux內存泄露案例分析和內存管理分享

    內存報警的消息,讓整個團隊都比較緊張,我們團隊負責的LB服務是零售、物流、科技等業務服務的流量入口,承接上萬個服務的流量轉發,一旦有故障影響業務服務比較多,必須馬上著手解決內存暴漲的問
    的頭像 發表于 10-24 16:14 ?763次閱讀
    Linux<b class='flag-5'>內存</b>泄露案例分析和<b class='flag-5'>內存</b>管理分享

    如何評判電子煙PCBA方案優劣

    如何評判電子煙方案優劣
    的頭像 發表于 10-16 16:21 ?615次閱讀
    如何評判電子煙PCBA方案<b class='flag-5'>優劣</b>

    內存時鐘和內存條有什么不同

    在探討內存時鐘(Memory Clock)和內存條(Memory Module)的不同時,我們首先需要明確這兩個概念的基本定義和它們在計算機系統中的角色。以下是對這兩個概念的詳細解析,以及它們之間差異的比較
    的頭像 發表于 09-04 11:45 ?1714次閱讀

    如何自定義內存控制器的設置

    策略都有其特定的使用場景和優缺點。以下是一些步驟和建議,用于自定義內存控制器的設置: 1. 選擇合適的內存分配策略 heap_1 :最簡單的內存分配策略,但分配的內存不允許釋放。適用于
    的頭像 發表于 09-02 14:28 ?553次閱讀

    單片機中的幾種環形緩沖區的分析和實現

    問題,而且其能夠更高效的使用內存。在單片機中,由于內存有限,而且需要盡可能避免使用動態內存,所以環形緩沖區在單片機中應用非常廣泛。二、原理通常我們需要使用一個數組
    的頭像 發表于 08-14 08:39 ?1030次閱讀
    單片機中的幾種環形緩沖區的分析和實現

    你知道嗎? 51單片機也有動態內存分配

    一、簡述其實在51單片機中也可以使用動態內存動態內存其實就是劃出一塊內存區域,將這塊內存進行管理,稱為內存管理。51單片機可以使用c語言自
    的頭像 發表于 04-26 08:10 ?1622次閱讀
    你知道嗎? 51單片機也有<b class='flag-5'>動態內存</b>分配

    電池模組需要置嗎?為什么?

    電池模組在生產過程中確實需要進行置處理,這一步驟對于電池的性能和安全性至關重要。
    的頭像 發表于 04-12 16:47 ?1563次閱讀

    探索推理時KV Cache的動態內存壓縮方法

    DMC通過一個決策變量(α)來有效地對輸入序列進行分段,每個段落可以獨立地決定是繼續追加還是進行累積。這允許模型在不同段落之間動態調整內存使用。
    發表于 03-22 09:16 ?956次閱讀
    探索推理時KV Cache的<b class='flag-5'>動態內存</b>壓縮方法

    C語言的指針用法

    C語言編程中善用指針可以簡化一些任務的處理,而對于一些任務(比如動態內存分配),必須要有指針才行的。也就是說精通C指針編程是很有必要的,幫助你成為一名優秀的Cer。
    發表于 03-05 14:22 ?383次閱讀
    C語言的指針用法

    C語言中的動態內存管理講解

    本章將講解 C 中的動態內存管理。C 語言為內存的分配和管理提供了幾個函數。這些函數可以在 頭文件中找到。
    的頭像 發表于 02-23 14:03 ?418次閱讀
    C語言中的<b class='flag-5'>動態內存</b>管理講解

    單片機上用malloc()是個坑,有隱患?

    做單片機研發前幾年,一直沒用過動態內存分配的功能,但是如果想成為軟件架構設計師,這是繞不過的一道坎。
    的頭像 發表于 02-22 15:53 ?2473次閱讀
    單片機上用malloc()是個坑,有隱患?
    主站蜘蛛池模板: 中国bdsmchinesehd| 在线播放一区二区精品产| 欧美夜夜噜2017最新| 欧美一区二区三区播放| 97精品免费视频| 干极品美女| 黄片a级毛片| 欧美白妞大战非洲大炮| 色播成人影院| 亚洲欧美自拍明星换脸| 4438全国免费观看| 国产-第1页-浮力影院| 精品少妇爆AV无码专区| 秋霞午夜一级理论片久久| 亚洲 日韩 欧美 另类 蜜桃| 一本色道久久综合亚洲AV蜜桃 | 色综合精品无码一区二区三区| 亚洲三级在线看| 精品一区二区三区高清免费观看 | 乳女教师欲乱动漫无修版动画| 大学生宿舍飞机china free| 久久天天婷婷五月俺也去| 肉动漫无码无删减在线观看| 第一次破女初国产美女| 消息称老熟妇乱视频一区二区 | 亚洲人精品午夜射精日韩| 九九久久久| 在线观看成人免费| 妙玉被肉干高H潮文| 亚洲国产精品免费观看| 超碰caoporon最新视频| 精品第一国产综合精品蜜芽| 一区二区三区无码高清视频 | yellow视频免费观看高清在线| 久久免费看视频| 67194成网页发布在线观看| 欧美色偷偷亚洲天堂bt| 91在线一区二区| 日本枯瘦娇小| BL文库好大粗黑强强肉NP| 精品国产国产综合精品|