回覆列表
-
1 # 新能源BMS
-
2 # 遛電子的老李
看使用場景,一般是禁止使用。
晶片級別開發。晶片資源有限,工程師一定要知道這片記憶體用於幹嘛的,動態分配記憶體很容易出問題。
而且很多晶片級編譯器都不支援malloc,要動態分配記憶體需要自己寫分配函式。
系統級別開發。帶作業系統的話這種風險就小很多,堆疊由作業系統分配,或者作業系統會把malloc函式重寫,安全性會高很多。
-
3 # 老饅頭簸箕
看什麼樣的“嵌入式”。
對於資源極度受限的“高度整合”系統,比如我們的星載計算機,2M位元組記憶體,就肯定不適合用。為此特別發展出了一套專用的開發系統規範“Ravenscar Profile”。
如果是能跑Linux的小系統,可以適當使用,自己做好記憶體洩漏相關的測試。
我的態度:
在嵌入式中(使用微控制器MCU,且沒有使用嵌入式作業系統)的系統中,不要動態分配記憶體。
原因:
(1)動態分配記憶體的風險大,容易導致系統崩潰,風險主要來自於動態分配的記憶體不進行釋放(由於疏忽,或是執行過程中的異常,導致malloc後,不free),最終導致RAM訪問越界,造成系統復位。我工作中就遇到過兩次這種情況:一個是產品在現場幾分鐘後就會復位,最終查出來原因是,現場干擾導致程式malloc後進入異常處理分支,而這個分支沒有free;第二次是做bootloader,載入的bin檔案,總是無法正常執行,將malloc函式修改去掉以後,功能正常,原因不明。
(2)動態分配記憶體意義不大,動態分配記憶體的唯一作用就是記憶體的分時複用。但是這個作用大部分可以透過定義區域性變數的方式實現。
因此,嵌入式系統,穩定性第一位,儘量不要使用malloc。
在公司看到嵌入式使用malloc的,我立刻會送他六字“別裝逼,趕緊改”。