內存管理,是指軟件運行時對計算機內存資源的分配和使用的技術。其最主要的目的是如何高效,快速的分配,并且在適當的時候釋放和回收內存資源。前面我們有介紹過如何使用FSMC外擴SRAM,實現內存容量的擴展。通過擴展后,我們可使用的內存(外擴SRAM容量是1MB,STM32F103ZET6內部SRAM有64KB)就比較多了。
盡管有這么多可使用的內存,但我們還是得使用某種方式來有效管理這些內存,這種方式和我們學習C語言時,使用malloc和free函數來申請內存和內存釋放類似,malloc用于申請內存,free用于釋放內存。本文我們就來介紹一種簡單的內存管理方式:分塊內存管理。該方法的實現原理如圖44.1.1所示:
從上圖我們可以看出,內存管理由內存池和內存管理表兩部分組成,內存池被分成n個內存塊,然后對應內存管理表,內存管理表就是用來標識相應的內存塊是否使用,我們可以對它進行設置。當相應的內存管理表設置為0的時候,表示該內存塊沒有被使用;而當內存管理表設置為非零的時候,表示該內存已被使用,而內存管理表里面的數字表示當前申請內存塊的數量,且申請的內存塊是連續的。
從上圖中我們還可以看出內存分配的方向是從底到頂的分配方向,即首先從最末端開始找空內存。通常當內存管理剛初始化的時候,內存表全部清零,表示沒有任何內存塊被占用。
(1)內存分配原理
當指針p調用malloc申請內存的時候,先判斷p要分配的內存塊數(m),然后從第n項開始,向下查找,直到找到m塊連續的空內存塊(即對應內存管理表項為0),然后將這m個內存管理表項的值都設置為m(標記被占用),最后,把最后的這個空內存塊的地址返回指針p,完成一次分配。注意,如果當內存不夠的時候(找到最后也沒找到連續的m塊空閑內存),則返回NULL給p,表示分配失敗。
(2)內存釋放原理
當p申請的內存用完,需要釋放的時候,調用free函數實現。free函數先判斷p指向的內存地址所對應的內存塊,然后找到對應的內存管理表項目,得到p所占用的內存塊數目m(內存管理表項目的值就是所分配內存塊的數目),將這m個內存管理表項目的值都清零,標記釋放,完成一次內存釋放。關于分塊式內存管理,我們就介紹到這里,想要了解更多內存管理的知識可以百度查找,網上也有很多這樣的介紹。
-
計算機
+關注
關注
19文章
7494瀏覽量
87953 -
內存
+關注
關注
8文章
3025瀏覽量
74047
發布評論請先 登錄
相關推薦
Linux kernel內存管理模塊結構分析
![Linux kernel<b class='flag-5'>內存</b><b class='flag-5'>管理</b>模塊結構分析](https://file.elecfans.com/web1/M00/C7/65/pIYBAF9lgGeAUz1cAAAUneLHs0k831.gif)
詳解單片機的內存分配
STM32單片機的內存優化策略
![STM32<b class='flag-5'>單片機</b>的<b class='flag-5'>內存</b>優化策略](https://file1.elecfans.com/web2/M00/93/EB/wKgaomTivN2AOW0JAAAk7dSAIOY578.png)
講解使用memheap內存管理算法對內部RAM和片外的SDRAM進行管理的方法
實時單片機通訊網絡中的內存管理
![實時<b class='flag-5'>單片機</b>通訊網絡中的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>](https://file.elecfans.com/web2/M00/48/DF/pYYBAGKhtCqAUceOAAAWQLy-jJ0626.jpg)
分享可應用于單片機的內存管理模塊mem_malloc
![分享可應用于<b class='flag-5'>單片機</b>的<b class='flag-5'>內存</b><b class='flag-5'>管理</b>模塊mem_malloc](https://file.elecfans.com/web2/M00/03/46/pYYBAGDVKwmAVrCfAAAWYRLy3Qs103.png)
基于51單片機6264擴展內存仿真設計(proteus仿真+程序)
![基于51<b class='flag-5'>單片機</b>6264擴展<b class='flag-5'>內存</b>仿真設計(proteus仿真+程序)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
單片機內存及運行原理
![<b class='flag-5'>單片機內存</b>及運行原理](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
使用memheap內存管理算法對片內RAM和片外SDRAM進行管理的方法
![使用memheap<b class='flag-5'>內存</b><b class='flag-5'>管理</b>算法對片內RAM和片外SDRAM<b class='flag-5'>進行管理</b>的方法](https://file.elecfans.com//web2/M00/4B/F1/pYYBAGKrMt-AJFt7AAA8rVQrkd4303.png)
評論