關於stm32 MCU申請動態內存malloc的認識


首先,malloc( )屬於標准C語言函數,當然可以在單片機上使用,如STM32可以先在啟動文件中設置heap的大小,再使用動態內存分配:

       Heap_Size     EQU    0x00000200      \\也就是 512字節;

但是一般單片機的內存都比較小,而且沒有MMU,malloc 與free的使用容易造成內存碎片。而且可能因為空間不足而分配失敗,從而導致系統崩潰,因此應該慎用,或者自己實現內存管理。

以下摘自網絡:
在函數中使用malloc,如果是大的內存分配,
而且malloc與free的次數也不是特別頻繁,使用malloc與free是比較合適的,

但是如果內存分配比較小,而且次數特別頻繁,那么使用malloc與free就有些不太合適了。
因為過多的malloc與free容易造成內存碎片,致使可使用的堆內存變小。

尤其是在對單片機等沒有MMU(內存管理)的芯片編程時,慎用malloc與free。
如果需要對內存的頻繁操作,可以自己實現一個內存管理。如外擴芯片用來實現內存管理,進行大容量的存儲內存等方式。

使用動態內存分配,應分不同的應用場合。
對於在操作系統上運行的程序,實際的物理內存分配與釋放使用操作系統來實現的,即使程序調用了 malloc和free物理內存並不會馬上變化。物理內存的變化,直到系統的內存管理操作時才發生。
對於裸機跑在MCU上的程序,分配與釋放內存都會造成實際物理內存的變化。因為此時物理內存的分配是由自己實現的,而內存管理我們自己並沒有去做。這樣,盲目的使用malloc與free恰恰並不好,反而會造成內存的不恰當使用。甚至於內存溢出。
所以,動態內存的使用前提是有一套好的內存管理方法,這樣動態內存的使用才會合理使用內存。如果沒有合適的內存管理代碼,還是用靜態內存好一些。
---------------------
作者:cuimingyang_
來源:CSDN
原文:https://blog.csdn.net/c12345423/article/details/53004465
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM