一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

靜、動態(tài)內(nèi)存的優(yōu)劣比較

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:YXQ ? 2019-08-06 18:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

關(guān)于靜態(tài)內(nèi)存與動態(tài)內(nèi)存

1.1、靜態(tài)和動態(tài)內(nèi)存的特點(diǎn)在探討這個問題之前我們先來對比下靜態(tài)內(nèi)存和動態(tài)內(nèi)存的特點(diǎn):1. 創(chuàng)建的時間不同: 創(chuàng)建的時間不同:靜態(tài)分配發(fā)生在程序編譯和連接的時候。動態(tài)分配則發(fā)生在程序調(diào)入和執(zhí)行的時候。

編譯鏈接過程中已經(jīng)分配好的

代碼運(yùn)行過程中使用rt_malloc分配

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

1.2、靜態(tài)和動態(tài)內(nèi)存的優(yōu)缺點(diǎn)

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

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

3. 動態(tài)內(nèi)存由于是動態(tài)分配,所以涉及到分配和釋放的問題,假設(shè)X程序在分配了ABC3塊內(nèi)存,程序執(zhí)行完畢后AC區(qū)域內(nèi)存被釋放,但是由于開發(fā)者的疏忽導(dǎo)致B區(qū)域的內(nèi)存被遺留。而X程序又是會被反復(fù)調(diào)用的,這樣我們的內(nèi)存區(qū)域由于有沒有釋放的區(qū)域?qū)е旅看握{(diào)用就會占用一段區(qū)域,最終系統(tǒng)就沒有內(nèi)存可以使用。這種情況一般在產(chǎn)品實(shí)際體現(xiàn)為最開始的時候設(shè)備正常工作,但是運(yùn)行了幾個小時或者幾天后死機(jī)。這種情況一般被稱作內(nèi)存泄漏(Memory Leak)。4. 在嵌入式RTOS中線程函數(shù)中使用靜態(tài)內(nèi)存,也就是在線程中定義局部變量,會加大線程??臻g的開銷。

裸機(jī)開發(fā)和RTOS開發(fā)的特點(diǎn)

1. 代碼規(guī)模:裸機(jī)開發(fā)的項(xiàng)目一般代碼規(guī)模度都比較小,對于一般開發(fā)者都難于駕馭使用裸機(jī)開發(fā)超大規(guī)模項(xiàng)目,人力成本和時間成本都太高。反而由于RTOS的模塊化特性,更容易開發(fā)出代碼規(guī)模大的項(xiàng)目。2. 系統(tǒng)穩(wěn)定性:在機(jī)電,航空,汽車等行業(yè)都是需要高實(shí)時性、高穩(wěn)定性和高安全性的。對于RTOS來說,系統(tǒng)任務(wù)的劃分調(diào)度都是系統(tǒng)管理,當(dāng)開發(fā)者對其機(jī)制了解不清楚的情況下反而帶來了部分風(fēng)險。除此之外RTOS上的內(nèi)存管理也是很大影響系統(tǒng)的,對于RTOS上一般不會存在MMU內(nèi)存管理單元,也就代表大部分運(yùn)行RTOS的芯片上都沒有虛擬地址映射,那么就無法利用物理地址和虛擬地址的特性進(jìn)行內(nèi)存整理,避免內(nèi)存泄漏。所以說在RTOS動態(tài)內(nèi)存這塊內(nèi)存有風(fēng)險。

嵌入式中是否應(yīng)該使用動態(tài)內(nèi)存

明白不同內(nèi)存的優(yōu)缺點(diǎn)和裸機(jī)RTOS的特點(diǎn)之后,我們在回頭來分析 “嵌入式中是否應(yīng)該使用動態(tài)內(nèi)存?” 這個問題。在實(shí)時嵌入式系統(tǒng)中,由于系統(tǒng)軟件并不像PC上復(fù)雜,一般都是很簡單的內(nèi)存使用,所以一般也不使用動態(tài)內(nèi)存管理,但是隨著RTOS面臨的任務(wù)越來越重,尤其是IoTAIoT的到來,讓許多消費(fèi)級產(chǎn)品運(yùn)行的RTOS的負(fù)擔(dān)越來越重。在這種情況下繼續(xù)使用靜態(tài)內(nèi)存開發(fā)會極大的限制開發(fā)進(jìn)度,整個開發(fā)的靈活性非常低。同時靜態(tài)的內(nèi)存無法復(fù)用使用同一片內(nèi)存區(qū)域,相比與動態(tài)內(nèi)存在大型項(xiàng)目中一般會使用更多的內(nèi)存,在內(nèi)存大小不容樂觀的嵌入式系統(tǒng)是很難接受的。但是針對一些高穩(wěn)定性和高安全性的項(xiàng)目來說,使用動態(tài)內(nèi)存就需要好好斟酌下,由于RTOS上基本沒有MMU的硬件支持或者是系統(tǒng)軟件支持,所以不可避免的系統(tǒng)中會出現(xiàn)內(nèi)存碎片,從而有可能導(dǎo)致系統(tǒng)異常。

最終說了這么多總結(jié)成以下幾點(diǎn):

1. 沒有使用RTOS的項(xiàng)目:不建議使用動態(tài)內(nèi)存,這種項(xiàng)目一般很簡單,不必使用動態(tài)內(nèi)存增大系統(tǒng)開銷和復(fù)雜度。

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

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

RT-Thread的內(nèi)存管理

RT-Thread 操作系統(tǒng)在內(nèi)存管理上,根據(jù)上層應(yīng)用及系統(tǒng)資源的不同,有針對性地提供了不同的內(nèi)存分配管理算法??傮w上可分為兩類:內(nèi)存堆管理與內(nèi)存池管理,而內(nèi)存堆管理又根據(jù)具體內(nèi)存設(shè)備劃分為三種情況:

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

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

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

原文標(biāo)題:嵌入式中是否應(yīng)該使用動態(tài)內(nèi)存?

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

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

    IEC61508系統(tǒng)中的動態(tài)內(nèi)存使用

    IEC 61508標(biāo)準(zhǔn)強(qiáng)烈推薦使用靜態(tài)內(nèi)存管理方式。在安全應(yīng)用設(shè)計(jì)中,我們都在遵循這個建議。
    的頭像 發(fā)表于 04-11 15:17 ?938次閱讀
    IEC61508系統(tǒng)中的<b class='flag-5'>動態(tài)內(nèi)存</b>使用

    如何使用LAX_CODEGEN啟用動態(tài)內(nèi)存分配?

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

    反激的PSR與SSR控制技術(shù)解析及優(yōu)劣

    方面,SSR控制由于PSR控制,每種控制技術(shù)都有各自的優(yōu)劣。根據(jù)CV控制策略,PSR控制可分為四代,即:Gen1為單一的PFM模式;Gen2為分段PFM模式;Gen3為PFM+PWM混合模式,在動態(tài)
    發(fā)表于 03-27 13:51

    快速搞懂C語言程序內(nèi)存分區(qū)!

    動態(tài)分配的數(shù)據(jù)等內(nèi)容。(內(nèi)存分區(qū)圖示)理解這些內(nèi)存分區(qū)的結(jié)構(gòu)和特性,不僅有助于編寫更高效的代碼,還能幫助排查和解決如段錯誤、內(nèi)存泄漏、棧溢出等常見問題。以下是常見的六
    的頭像 發(fā)表于 03-14 17:37 ?671次閱讀
    快速搞懂C語言程序<b class='flag-5'>內(nèi)存</b>分區(qū)!

    一文洞悉PoC公網(wǎng)對講與DMR數(shù)模對講的優(yōu)劣之勢

    在通信領(lǐng)域,對講技術(shù)以其獨(dú)特的即時通訊特性,在眾多行業(yè)和場景中發(fā)揮著重要作用。其中,PoC公網(wǎng)對講和DMR數(shù)模對講作為兩種主流的對講技術(shù),各自具有獨(dú)特的優(yōu)勢和局限性。本文將對這兩種技術(shù)進(jìn)行詳細(xì)的比較
    的頭像 發(fā)表于 12-25 16:24 ?866次閱讀
    一文洞悉PoC公網(wǎng)對講與DMR數(shù)模對講的<b class='flag-5'>優(yōu)劣</b>之勢

    串聯(lián)電路與并聯(lián)電路的優(yōu)劣比較

    串聯(lián)電路與并聯(lián)電路各有其優(yōu)劣,具體如下: 串聯(lián)電路的優(yōu)勢: 電流相同:串聯(lián)電路中,流過每個元件的電流是相同的,這使得在需要控制電流的應(yīng)用中很有用。 簡化電路設(shè)計(jì):在某些情況下,串聯(lián)電路的設(shè)計(jì)和實(shí)現(xiàn)
    的頭像 發(fā)表于 12-02 17:32 ?3152次閱讀

    Prolith和HyperLith的優(yōu)劣

    Prolith和HyperLith在光刻領(lǐng)域的優(yōu)劣勢,可以展開討論討論
    發(fā)表于 11-29 22:12

    DDR內(nèi)存與SDRAM的區(qū)別 DDR4內(nèi)存與DDR3內(nèi)存哪個好

    DDR內(nèi)存與SDRAM的區(qū)別 1. 定義與起源 SDRAM (Synchronous Dynamic Random Access Memory) :同步動態(tài)隨機(jī)存取存儲器,是一種早期的內(nèi)存技術(shù),它與
    的頭像 發(fā)表于 11-29 14:57 ?3611次閱讀

    DDR內(nèi)存的工作原理與結(jié)構(gòu)

    DDR內(nèi)存,全稱為Double Data Rate Synchronous Dynamic Random Access Memory(雙倍數(shù)據(jù)速率同步動態(tài)隨機(jī)存取內(nèi)存),是一種用于計(jì)算機(jī)和其他
    的頭像 發(fā)表于 11-20 14:32 ?2492次閱讀

    Linux內(nèi)存泄露案例分析和內(nèi)存管理分享

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

    如何評判電子煙PCBA方案優(yōu)劣

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

    【米爾NXP i.MX 93開發(fā)板試用評測】1、異構(gòu)核心通信的技術(shù)內(nèi)容

    ,確定性更差,這是動態(tài)內(nèi)存引入的特性。下表顯示了OpenAMP RPMsg實(shí)現(xiàn)與新的RPMsg-Lite實(shí)現(xiàn)之間的一些粗略比較數(shù)據(jù): RPMsg-Lite的源碼框架 RPMsg-Lite的實(shí)現(xiàn)可以分為三個
    發(fā)表于 09-21 20:24

    內(nèi)存時鐘和內(nèi)存條有什么不同

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

    如何自定義內(nèi)存控制器的設(shè)置

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

    單片機(jī)中的幾種環(huán)形緩沖區(qū)的分析和實(shí)現(xiàn)

    問題,而且其能夠更高效的使用內(nèi)存。在單片機(jī)中,由于內(nèi)存有限,而且需要盡可能避免使用動態(tài)內(nèi)存,所以環(huán)形緩沖區(qū)在單片機(jī)中應(yīng)用非常廣泛。二、原理通常我們需要使用一個數(shù)組
    的頭像 發(fā)表于 08-14 08:39 ?1769次閱讀
    單片機(jī)中的幾種環(huán)形緩沖區(qū)的分析和實(shí)現(xiàn)