一種內存管理方法及裝置的制造方法
【技術領域】
[0001]本發(fā)明涉及存儲領域,尤其涉及一種內存管理方法及裝置。
【背景技術】
[0002]無線傳感網(wǎng)絡是當前備受關注的研究領域,它由部署在監(jiān)測區(qū)域內大量的微型傳感器節(jié)點組成,通過無線通信方式形成一個網(wǎng)絡系統(tǒng),可協(xié)作的感知、采集、處理網(wǎng)絡覆蓋區(qū)域中被感知對象的信息,能夠應用于軍事國防、工農業(yè)控制、環(huán)境檢測、搶險救災、危險區(qū)域遠程控制等領域。而其中傳感器節(jié)點是一個微型的嵌入式系統(tǒng),攜帶非常有限的硬件資源,需要操作系統(tǒng)能夠節(jié)能高效地使用其有限的內存、處理器和通信模塊。實際情況中,傳感節(jié)點程序需要頻繁的申請內存和釋放內存,而按照現(xiàn)有的內存管理方法,由于不確定節(jié)點程序所申請的內存大小,釋放內存時會讓操作系統(tǒng)中存在大量小而不連續(xù)的內存碎片,造成了資源的浪費,進而也降低了內存利用率。
【發(fā)明內容】
[0003]本發(fā)明實施例提供一種內存管理方法及裝置,可提高內存利用率。
[0004]為了解決上述技術問題,本發(fā)明實施例提供了一種內存管理方法,包括:
[0005]當接收到任一節(jié)點程序的申請內存請求時,對所述任一節(jié)點程序分配內存塊,并在內存池鏈表中將所述內存塊標記為占用狀態(tài);
[0006]當接收到所述任一節(jié)點程序的釋放內存請求時,根據(jù)所述釋放內存請求將釋放內存塊釋放,且在所述內存池鏈表中將所述釋放內存塊標記為空閑狀態(tài);
[0007]當所述釋放內存塊是第一拆分塊時,且與所述第一拆分塊相對應的第二拆分塊處于所述空閑狀態(tài),則將所述第一拆分塊與所述第二拆分塊組合為合并內存塊。
[0008]相應地,本發(fā)明實施例還提供了一種內存管理裝置,包括:
[0009]內存分配模塊,用于當接收到任一節(jié)點程序的申請內存請求時,對所述任一節(jié)點程序分配內存塊,并在內存池鏈表中將所述內存塊標記為占用狀態(tài);
[0010]內存釋放模塊,用于當接收到所述任一節(jié)點程序的釋放內存請求時,根據(jù)所述釋放內存請求將釋放內存塊釋放,且在所述內存池鏈表中將所述釋放內存塊標記為空閑狀態(tài);
[0011]內存合并模塊,用于當所述釋放內存塊是第一拆分塊時,且與所述第一拆分塊相對應的第二拆分塊處于所述空閑狀態(tài),則將所述第一拆分塊與所述第二拆分塊組合為合并內存塊。
[0012]在本發(fā)明實施例中,當接收到任一節(jié)點程序的申請內存請求時,對任一節(jié)點程序分配內存塊,并在內存池鏈表中將內存塊標記為占用狀態(tài),當接收到任一節(jié)點程序的釋放內存請求時,根據(jù)釋放內存請求將釋放內存塊釋放,且在內存池鏈表中將釋放內存塊標記為空閑狀態(tài),當釋放內存塊是第一拆分塊時,且與第一拆分塊相對應的第二拆分塊處于空閑狀態(tài),則將所述第一拆分塊與所述第二拆分塊組合為合并內存塊。通過釋放與任一節(jié)點程序的釋放內存請求相對應的內存塊,減少了由于不確定申請內存大小而產生的內存碎片,從而避免了資源的浪費,并通過拆分和合并內存塊可合理利用節(jié)點內存,提高了內存利用率。
【附圖說明】
[0013]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0014]圖1是本發(fā)明實施例提供的一種內存管理方法的流程示意圖;
[0015]圖2是本發(fā)明實施例提供的另一種內存管理方法的流程示意圖;
[0016]圖3是本發(fā)明實施例提供的又一種內存管理方法的流程示意圖;
[0017]圖4是本發(fā)明實施例提供的又一種內存管理方法的流程示意圖;
[0018]圖5是本發(fā)明實施例提供的一種內存管理裝置的結構示意圖;
[0019]圖6是本發(fā)明實施例提供的另一種內存管理裝置的結構示意圖;
[0020]圖7是本發(fā)明實施例提供的內存分配模塊的結構示意圖;
[0021]圖8是本發(fā)明實施例提供的內存釋放模塊的結構示意圖;
[0022]圖9是本發(fā)明實施例提供的內存合并模塊的結構示意圖。
【具體實施方式】
[0023]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有付出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0024]本發(fā)明實施例所述的內存管理方法可以應用于傳感器節(jié)點操作系統(tǒng)的內存管理場景,例如:當傳感器節(jié)點操作系統(tǒng)接收到任一節(jié)點程序的申請內存請求時,對所述任一節(jié)點程序分配內存塊,并在內存池鏈表中將所述內存塊標記為占用狀態(tài),當接收到所述任一節(jié)點程序的釋放內存請求時,根據(jù)所述釋放內存請求將釋放內存塊釋放,且在所述內存池鏈表中將所述釋放內存塊標記為空閑狀態(tài),當所述釋放內存塊是第一拆分塊時,且與所述第一拆分塊相對應的第二拆分塊處于所述空閑狀態(tài),則將所述第一拆分塊與所述第二拆分塊組合為合并內存塊。通過釋放與任一節(jié)點程序的釋放內存請求相對應的內存塊,減少了由于不確定申請內存大小而產生的內存碎片,從而避免了資源的浪費,并通過拆分和合并內存塊可合理利用節(jié)點內存,提高了內存利用率。
[0025]下面將結合附圖1-附圖4,對本發(fā)明實施例提供的內存管理方法進行詳細介紹。
[0026]請參見圖1,為本發(fā)明實施例提供了一種內存管理方法的流程示意圖。如圖1所示,本發(fā)明實施例的所述方法可以包括以下步驟SlOl-步驟S103。
[0027]S101,當接收到任一節(jié)點程序的申請內存請求時,對所述任一節(jié)點程序分配內存塊,并在內存池鏈表中將所述內存塊標記為占用狀態(tài);
[0028]具體的,當內存管理裝置接收到任一節(jié)點程序的申請內存請求時,可根據(jù)所述任一節(jié)點程序的申請內存空間分配內存塊,在所述內存管理裝置分配完所述內存塊之后,在內存池鏈表中將所述內存塊標記為占用狀態(tài),即所述內存塊在被釋放之前不能被其余節(jié)點程序再次申請。
[0029]需要說明的是,所述內存池鏈表是記錄內存池中內存塊的內存空間、標識/[目息、歸屬信息、狀態(tài)信息。所述標識信息是用于區(qū)分各個內存塊的信息。所述歸屬信息是指內存塊最初屬于的內存塊信息,可以理解的是,在內存塊未被拆分之前,其標識信息與歸屬信息是相同的;當內存塊被拆分之后,每一個拆分塊都有一個新的標識信息,但是歸屬信息保持不變,并且可知由同一個內存塊拆分得到的拆分塊的歸屬信息相同。所述狀態(tài)信息是用以指示所述內存塊是處于空閑狀態(tài)還是占用狀態(tài),處于空閑狀態(tài)的內存塊可在接收到節(jié)點程序申請內存請求時,進行分配并標記處于占用狀態(tài);處于占用狀態(tài)的內存塊在接收到釋放內存請求時,進行釋放并標記處于空閑狀態(tài)。
[0030]S102,當接收到所述任一節(jié)點程序的釋放內存請求時,根據(jù)所述釋放內存請求將釋放內存塊釋放,且在所述內存池鏈表中將所述釋放內存塊標記為空閑狀態(tài);
[0031]具體的,當所述內存管理裝置接收到所述任一節(jié)點程序的釋放內存請求時,根據(jù)所述任一節(jié)點程序釋放內存的地址進行查詢,進而得到相對應的釋放內存塊,將所述釋放內存塊進行釋放,并且在所述內存池鏈表中將所述釋放內存塊標記為空閑狀態(tài),用以提供其他節(jié)點程序申請并使用。
[0032]S103,當所述釋放內存塊是第一拆分塊時,且與所述第一拆分塊相對應的第二拆分塊處于所述空閑狀態(tài),則將所述第一拆分塊與所述第二拆分塊組合為合并內存塊;
[0033]具體的,所述內存管理裝置在所述內存池鏈表中查詢所述釋放內存塊的標識信息與歸屬信息是否相同,若相同,則所述釋放內存塊不是拆分塊;若不相同,則所述釋放內存塊是拆分塊,標記為第一拆分塊,同時在所述內存池鏈表中查詢與第一拆分塊歸屬信息相同的第二拆分塊的狀態(tài)信息,若所述第二拆分塊處于空閑狀態(tài),則可根據(jù)所述第一拆分塊與所述第二拆分塊的首地址先后順序將兩者組合為合并內存塊,并在所述內存池鏈表中更新合并內存塊的內存空間、標識信息、歸屬信息、狀態(tài)信息,用以提供其他節(jié)點程序申請并使用。
[0034]在本發(fā)明實施例中,當接收到任一節(jié)點程序的申請內存請求時,對任一節(jié)點程序分配內存塊,并在內存池鏈表中將內存塊標記為占用狀態(tài),當接收到任一節(jié)點程序的釋放內存請求時,根據(jù)釋放內存請求將釋放內存塊釋放,且在內存池鏈表中將釋放內存塊標記為空閑狀態(tài),當釋放內存塊是第一拆分塊時,且與第一拆分塊相對應的第二拆分塊處于空閑狀態(tài),則將所述第一拆分塊與所述第二拆分塊組合為合并內存塊。通過釋放與任一節(jié)點程序的釋放內存請求相對應的內存塊,減少了由于不確定申請內存大小而產生的內存碎片,從而避免了資源的浪費,并通過拆分和合并內存塊可合理利用節(jié)點內存,提高了內存利用率。
[0035]請參見圖2,為本發(fā)明實施例提供了另一種內存管理方法的流程示意圖。如圖2所示,本發(fā)明實施例的所述方法可包括以下步驟S201-步驟S209。
[0036]S201,根據(jù)節(jié)點內存空間創(chuàng)建內存池,在所述內存池中將所述內存空間劃分為2k字節(jié)的內存塊,其中k為正整數(shù);
[0037]具體的,內存管理裝置在初始階段根據(jù)節(jié)點內存空間創(chuàng)建內存池,在所述內存池中將所述內存空間劃分為2k字節(jié)的內存塊,其中k為正整數(shù)。所述內存空間的劃分可按照k從小到大的順序依次劃分為2k字節(jié)的內存塊,