內(nèi)存管理,是指軟件運(yùn)行時(shí)對(duì)計(jì)算機(jī)內(nèi)存資源的分配和使用的技術(shù)。其最主要的目的是如何高效,快速的分配,并且在適當(dāng)?shù)臅r(shí)候釋放和回收內(nèi)存資源。前面我們有介紹過如何使用FSMC外擴(kuò)SRAM,實(shí)現(xiàn)內(nèi)存容量的擴(kuò)展。通過擴(kuò)展后,我們可使用的內(nèi)存(外擴(kuò)SRAM容量是1MB,STM32F103ZET6內(nèi)部SRAM有64KB)就比較多了。
盡管有這么多可使用的內(nèi)存,但我們還是得使用某種方式來有效管理這些內(nèi)存,這種方式和我們學(xué)習(xí)C語言時(shí),使用malloc和free函數(shù)來申請(qǐng)內(nèi)存和內(nèi)存釋放類似,malloc用于申請(qǐng)內(nèi)存,free用于釋放內(nèi)存。本文我們就來介紹一種簡單的內(nèi)存管理方式:分塊內(nèi)存管理。該方法的實(shí)現(xiàn)原理如圖44.1.1所示:
從上圖我們可以看出,內(nèi)存管理由內(nèi)存池和內(nèi)存管理表兩部分組成,內(nèi)存池被分成n個(gè)內(nèi)存塊,然后對(duì)應(yīng)內(nèi)存管理表,內(nèi)存管理表就是用來標(biāo)識(shí)相應(yīng)的內(nèi)存塊是否使用,我們可以對(duì)它進(jìn)行設(shè)置。當(dāng)相應(yīng)的內(nèi)存管理表設(shè)置為0的時(shí)候,表示該內(nèi)存塊沒有被使用;而當(dāng)內(nèi)存管理表設(shè)置為非零的時(shí)候,表示該內(nèi)存已被使用,而內(nèi)存管理表里面的數(shù)字表示當(dāng)前申請(qǐng)內(nèi)存塊的數(shù)量,且申請(qǐng)的內(nèi)存塊是連續(xù)的。
從上圖中我們還可以看出內(nèi)存分配的方向是從底到頂?shù)姆峙浞较颍词紫葟淖钅┒碎_始找空內(nèi)存。通常當(dāng)內(nèi)存管理剛初始化的時(shí)候,內(nèi)存表全部清零,表示沒有任何內(nèi)存塊被占用。
(1)內(nèi)存分配原理
當(dāng)指針p調(diào)用malloc申請(qǐng)內(nèi)存的時(shí)候,先判斷p要分配的內(nèi)存塊數(shù)(m),然后從第n項(xiàng)開始,向下查找,直到找到m塊連續(xù)的空內(nèi)存塊(即對(duì)應(yīng)內(nèi)存管理表項(xiàng)為0),然后將這m個(gè)內(nèi)存管理表項(xiàng)的值都設(shè)置為m(標(biāo)記被占用),最后,把最后的這個(gè)空內(nèi)存塊的地址返回指針p,完成一次分配。注意,如果當(dāng)內(nèi)存不夠的時(shí)候(找到最后也沒找到連續(xù)的m塊空閑內(nèi)存),則返回NULL給p,表示分配失敗。
(2)內(nèi)存釋放原理
當(dāng)p申請(qǐng)的內(nèi)存用完,需要釋放的時(shí)候,調(diào)用free函數(shù)實(shí)現(xiàn)。free函數(shù)先判斷p指向的內(nèi)存地址所對(duì)應(yīng)的內(nèi)存塊,然后找到對(duì)應(yīng)的內(nèi)存管理表項(xiàng)目,得到p所占用的內(nèi)存塊數(shù)目m(內(nèi)存管理表項(xiàng)目的值就是所分配內(nèi)存塊的數(shù)目),將這m個(gè)內(nèi)存管理表項(xiàng)目的值都清零,標(biāo)記釋放,完成一次內(nèi)存釋放。關(guān)于分塊式內(nèi)存管理,我們就介紹到這里,想要了解更多內(nèi)存管理的知識(shí)可以百度查找,網(wǎng)上也有很多這樣的介紹。
-
計(jì)算機(jī)
+關(guān)注
關(guān)注
19文章
7636瀏覽量
90269 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3111瀏覽量
75028
發(fā)布評(píng)論請(qǐng)先 登錄
Linux kernel內(nèi)存管理模塊結(jié)構(gòu)分析

詳解單片機(jī)的內(nèi)存分配
STM32單片機(jī)的內(nèi)存優(yōu)化策略

講解使用memheap內(nèi)存管理算法對(duì)內(nèi)部RAM和片外的SDRAM進(jìn)行管理的方法
實(shí)時(shí)單片機(jī)通訊網(wǎng)絡(luò)中的內(nèi)存管理

51單片機(jī)如何使用動(dòng)態(tài)內(nèi)存

一個(gè)基于無操作系統(tǒng)的STM32單片機(jī)的單片機(jī)內(nèi)存管理器

分享可應(yīng)用于單片機(jī)的內(nèi)存管理模塊mem_malloc

基于51單片機(jī)6264擴(kuò)展內(nèi)存仿真設(shè)計(jì)(proteus仿真+程序)

單片機(jī)內(nèi)存及運(yùn)行原理

【KEIL·單片機(jī)·掃盲貼】關(guān)于ARM單片機(jī)程序內(nèi)存使用情況的細(xì)致討論。

使用memheap內(nèi)存管理算法對(duì)片內(nèi)RAM和片外SDRAM進(jìn)行管理的方法

單片機(jī)的內(nèi)存映射圖解析

單片機(jī)的內(nèi)存映射圖解析

你知道嗎? 51單片機(jī)也有動(dòng)態(tài)內(nèi)存分配

評(píng)論