嵌入式程式設計動態記憶體和靜態記憶體的方案選擇

2021-07-06 10:38:39 字數 501 閱讀 2055

在網上看到很多關於在嵌入式上是否使用動態記憶體及如何應對記憶體碎片的文章,我在進行嵌入式程式設計時也老在糾結這個問題。

記憶體碎片是由動態記憶體分配造成的,經過頻繁的動態分配和釋放後,在很多記憶體段上會出現兩個已經被分配的記憶體快之間有一段很小的空閒記憶體的情況,這些小的空閒記憶體就是所為的碎片。

因為這些小記憶體並不連續而且小到無法或者很難再被利用起來,所以會導致本來系統有空閒的記憶體但應用程式確無法獲取動態記憶體分配的情況。是否會出現這種情況取決於應用程式動態分配的動作,所以可以通過分析應用程式的動態記憶體分配的特點來判斷系統長時間執行後是否會出現大量記憶體碎片。比如在很多網路協議棧裡是使用動態記憶體的,裡面的動態記憶體都有乙個特點就是有乙個很短的生命週期,這樣記憶體塊中就不可能形成固定的碎片,碎片的規模就不會累加增長。

因此在嵌入式程式設計中我覺得應該遵循的乙個原則是根據所設計系統的特點來決定選擇使用動態還是靜態,一些可靠性要求非常高的使用靜態的,而普通的業務可以使用動態來提高記憶體使用效率。靜態可以保證可靠性但是需要考慮上限,記憶體使用效率低,而動態則是相反。

動態記憶體與靜態記憶體的區別

1.靜態記憶體 靜態記憶體是指在程式開始執行時由編譯器分配的記憶體,它的分配是在程式開始編譯時完成的,不占用cpu資源。程式中的各種變數,在編譯時系統已經為其分配了所需的記憶體空間,當該變數在作用域內使用完畢時,系統會 自動釋放所占用的記憶體空間。變數的分配與釋放,都無須程式設計師自行考慮。eg 基...

嵌入式記憶體布局

從事手機平台研發也有一年多了,總結了一下有關手機記憶體方面的知識希望對新手有所裨益。如果有高手路過檢視之餘如有紕漏之處還請不吝賜教 說明 傳統 燒機 流程將軟體燒錄到flash中,軟體bootloader部分在nor flash中,軟體的其他部分燒錄到nand flash 強調一點 上圖左邊部分是f...

靜態記憶體分配和 動態記憶體分配

1 靜態記憶體分配是在編譯時完成的,不需要占用cpu資源 動態分配記憶體是在執行時完成的,動態記憶體的分配與釋放需要占用cpu資源 2 靜態記憶體分配是在棧上分配的,動態記憶體是堆上分配的 3 動態記憶體分配需要指標或引用資料型別的支援,而靜態記憶體分配不需要 4 靜態分配記憶體需要在編譯前確定記憶...