專利名稱:內(nèi)存管理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及通信領(lǐng)域,具體而言,涉及一種內(nèi)存管理方法及裝置。
背景技術(shù):
在移動(dòng)通信嵌入式應(yīng)用領(lǐng)域,嵌入式操作系統(tǒng)的應(yīng)用日益廣泛,但是,硬件平臺(tái)存 在內(nèi)存限制,這就使得動(dòng)態(tài)內(nèi)存的使用成為了趨勢(shì)。通常,使用動(dòng)態(tài)內(nèi)存可以提高內(nèi)存的使 用效率,提高系統(tǒng)容量。相關(guān)技術(shù)提供了一種動(dòng)態(tài)內(nèi)存管理接口,包括申請(qǐng)接口 mallocO和釋放接口 freeO。但是上述接口長時(shí)間的使用以后會(huì)出現(xiàn)如圖1所示情況,S卩,內(nèi)存會(huì)被分成大小不 同的若干塊。若接收到內(nèi)存申請(qǐng)時(shí),需要遍歷整個(gè)空閑隊(duì)列找到比當(dāng)前申請(qǐng)的內(nèi)存塊尺寸 相等或者更大的內(nèi)存塊,然后從該內(nèi)存塊上劃分申請(qǐng)的內(nèi)存塊尺寸大小的內(nèi)存,把剩余的 內(nèi)存再掛接在空閑隊(duì)列上。這樣隨著不斷地申請(qǐng)釋放會(huì)產(chǎn)生大量的不連續(xù)內(nèi)存碎片,存在 較大的內(nèi)存浪費(fèi),而且每次查找比當(dāng)前申請(qǐng)的內(nèi)存塊尺寸相等或者更大的內(nèi)存塊,均需要 對(duì)整個(gè)鏈表進(jìn)行遍歷,查找效率較差。相關(guān)技術(shù)中還提供了一些改進(jìn)的動(dòng)態(tài)內(nèi)存管理方式,如DSP(Digital Signal Processor,數(shù)字信號(hào)處理器)上的 DSP/BIOS (Basiclnstruction Operation System,基本 指令操作系統(tǒng))提供的緩沖池Buffer Pool方式,示意圖請(qǐng)參見圖2,這種內(nèi)存管理方式需 要預(yù)先根據(jù)應(yīng)用的情況分配好各個(gè)隊(duì)列的內(nèi)存數(shù)量,在初始化的時(shí)候把隊(duì)列根據(jù)內(nèi)存的大 小和數(shù)量建立好,在應(yīng)用過程中根據(jù)需求進(jìn)行申請(qǐng)和釋放。這就可能由于預(yù)先劃分的不合 理出現(xiàn)一種隊(duì)列中內(nèi)存使用完了,而其他隊(duì)列中還有充足內(nèi)存的情況,這種動(dòng)態(tài)內(nèi)存管理 方式采用固定尺寸管理,靈活性差,內(nèi)存仍不能得到充分利用。針對(duì)相關(guān)技術(shù)中內(nèi)存浪費(fèi)的問題,目前尚未提出有效的解決方案。
發(fā)明內(nèi)容
本發(fā)明的主要目的在于提供一種內(nèi)存管理方法及裝置,以至少解決上述內(nèi)存浪費(fèi) 的問題。根據(jù)本發(fā)明的一個(gè)方面,提供了一種內(nèi)存管理方法,包括根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列,不同隊(duì)列管理不同尺寸的內(nèi)存塊, 各隊(duì)列管理的內(nèi)存塊尺寸由所述內(nèi)存需求確定,所述應(yīng)用系統(tǒng)中包含至少一個(gè)應(yīng)用;將所述應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的隊(duì)列中;以及當(dāng)所述應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在所述各隊(duì)列中查找與申請(qǐng)的內(nèi)存 塊尺寸匹配的內(nèi)存塊并分配給所述應(yīng)用。較優(yōu)的,所述根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列之前,包括為所述應(yīng)用系統(tǒng)配置內(nèi)存量大于所述應(yīng)用系統(tǒng)的內(nèi)存需求的內(nèi)存堆;以及在所述各隊(duì)列中未查找與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊并分配給所述應(yīng)用時(shí), 包括
4
在所述內(nèi)存堆中分割與所述申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊,并分配給所述應(yīng)用。較優(yōu)的,若所述內(nèi)存堆中剩余內(nèi)存量小于所述申請(qǐng)的內(nèi)存塊尺寸時(shí),通知所述應(yīng) 用申請(qǐng)失敗。較優(yōu)的,所述應(yīng)用系統(tǒng)已釋放的內(nèi)存塊是所述內(nèi)存堆最后一次分割的內(nèi)存塊時(shí), 回收該內(nèi)存塊。較優(yōu)的,在所述內(nèi)存堆中分割與所述申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊,并分配給 所述應(yīng)用,包括從所述內(nèi)存堆的底部依次分割與所述申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊。較優(yōu)的,從所述內(nèi)存堆的底部依次分割與所述申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊之 后,還包括在所述內(nèi)存堆頭部保存已分配的內(nèi)存塊地址與所述內(nèi)存堆地址形成的偏移量,并 將所述偏移量進(jìn)行排序;以及根據(jù)排序結(jié)果確定所述內(nèi)存堆即將回收的內(nèi)存塊的地址。較優(yōu)的,當(dāng)所述應(yīng)用系統(tǒng)改變,或者所述應(yīng)用系統(tǒng)的內(nèi)存需求改變時(shí),根據(jù)改變后 的應(yīng)用系統(tǒng)的內(nèi)存需求重新配置至少一個(gè)隊(duì)列。根據(jù)本發(fā)明的另一方面,提供了一種內(nèi)存管理裝置,包括配置單元,用于根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列,不同隊(duì)列管理不同 尺寸的內(nèi)存塊,各隊(duì)列管理的內(nèi)存塊尺寸由所述內(nèi)存需求確定,所述應(yīng)用系統(tǒng)中包含至少 一個(gè)應(yīng)用;存儲(chǔ)單元,用于將所述應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的 隊(duì)列中;分配單元,用于當(dāng)所述應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在所述各隊(duì)列中查 找與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊并分配給所述應(yīng)用。較優(yōu)的,所述配置單元,進(jìn)一步用于為所述應(yīng)用系統(tǒng)配置內(nèi)存量大于所述應(yīng)用系 統(tǒng)的內(nèi)存需求的內(nèi)存堆;所述分配單元,進(jìn)一步用于在所述內(nèi)存堆中分割與所述申請(qǐng)的內(nèi)存塊尺寸匹配的 內(nèi)存塊,并分配給所述應(yīng)用。較優(yōu)的,所述分配單元,進(jìn)一步用于若所述內(nèi)存堆中剩余內(nèi)存量小于所述申請(qǐng)的 內(nèi)存塊尺寸時(shí),通知所述應(yīng)用申請(qǐng)失敗。較優(yōu)的,回收單元,用于所述應(yīng)用系統(tǒng)已釋放的內(nèi)存塊是所述內(nèi)存堆最后一次分 割的內(nèi)存塊時(shí),回收該內(nèi)存塊。較優(yōu)的,所述分配單元,進(jìn)一步用于從所述內(nèi)存堆的底部依次分割與所述申請(qǐng)的 內(nèi)存塊尺寸匹配的內(nèi)存塊。較優(yōu)的,所述回收單元,進(jìn)一步用于在所述內(nèi)存堆頭部保存已分配的內(nèi)存塊地址 與所述內(nèi)存堆地址形成的偏移量,并將所述偏移量進(jìn)行排序;以及,根據(jù)排序結(jié)果確定所述 內(nèi)存堆即將回收的內(nèi)存塊的地址。較優(yōu)的,所述配置單元,進(jìn)一步用于當(dāng)所述應(yīng)用系統(tǒng)改變,或者所述應(yīng)用系統(tǒng)的內(nèi) 存需求改變時(shí),根據(jù)改變后的應(yīng)用系統(tǒng)的內(nèi)存需求重新配置至少一個(gè)隊(duì)列。在本發(fā)明實(shí)施例中,應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的隊(duì)列中,當(dāng)應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在各隊(duì)列中查找與申請(qǐng)的內(nèi)存塊尺寸匹配 的內(nèi)存塊并分配給應(yīng)用,充分利用了未被回收的內(nèi)存塊,提高內(nèi)存的利用率。
此處所說明的附圖用來提供對(duì)本發(fā)明的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本發(fā) 明的示意性實(shí)施例及其說明用于解釋本發(fā)明,并不構(gòu)成對(duì)本發(fā)明的不當(dāng)限定。在附圖中圖1是根據(jù)相關(guān)技術(shù)的第一種內(nèi)存管理方法形成的內(nèi)存塊示意圖;圖2是根據(jù)相關(guān)技術(shù)的第二種內(nèi)存管理方法形成的內(nèi)存塊示意圖;圖3是根據(jù)本發(fā)明實(shí)施例的內(nèi)存管理方法的處理流程圖;圖4是根據(jù)本發(fā)明實(shí)施例的內(nèi)存管理方法的實(shí)施例的流程圖;圖5是根據(jù)本發(fā)明實(shí)施例的內(nèi)存堆的示意圖;圖6是根據(jù)本發(fā)明實(shí)施例的內(nèi)存管理裝置的第一種結(jié)構(gòu)示意圖;圖7是根據(jù)本發(fā)明實(shí)施例的內(nèi)存管理裝置的第二種結(jié)構(gòu)示意圖。
具體實(shí)施例方式下文中將參考附圖并結(jié)合實(shí)施例來詳細(xì)說明本發(fā)明。需要說明的是,在不沖突的 情況下,本申請(qǐng)中的實(shí)施例及實(shí)施例中的特征可以相互組合。相關(guān)技術(shù)提到的兩種動(dòng)態(tài)內(nèi)存管理方法均存在內(nèi)存利用不充分的問題,為解決該 技術(shù)問題,本發(fā)明實(shí)施例提出一種內(nèi)存管理方法,處理流程如圖3所示,包括步驟302、根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列,不同隊(duì)列管理不同尺寸的 內(nèi)存塊,各隊(duì)列管理的內(nèi)存塊尺寸由內(nèi)存需求確定,應(yīng)用系統(tǒng)中包含至少一個(gè)應(yīng)用;步驟304、將應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的隊(duì)列中;步驟306、當(dāng)應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在各隊(duì)列中查找與申請(qǐng)的內(nèi)存 塊尺寸匹配的內(nèi)存塊并分配給應(yīng)用。在本發(fā)明實(shí)施例中,應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的隊(duì) 列中,當(dāng)應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在各隊(duì)列中查找與申請(qǐng)的內(nèi)存塊尺寸匹配 的內(nèi)存塊并分配給應(yīng)用,充分利用了未被回收的內(nèi)存塊,提高內(nèi)存的利用率。實(shí)施時(shí),根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列之前,需要首先劃分足量的 內(nèi)存作為本發(fā)明實(shí)施例提供的內(nèi)存管理方法所使用的內(nèi)存堆,例如,在本例中,就需要為應(yīng) 用系統(tǒng)配置內(nèi)存量大于應(yīng)用系統(tǒng)的內(nèi)存需求的內(nèi)存堆,這樣才能夠滿足應(yīng)用系統(tǒng)的對(duì)內(nèi)存 的需求。此時(shí),若在各隊(duì)列中未查找與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊并分配給應(yīng)用時(shí),還 可以在內(nèi)存堆中分割與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊,并分配給應(yīng)用。當(dāng)然了,在實(shí)施時(shí),若內(nèi)存堆中剩余內(nèi)存量小于申請(qǐng)的內(nèi)存塊尺寸時(shí),則無法獲得 可用的內(nèi)存塊,通知應(yīng)用申請(qǐng)失敗。在本發(fā)明實(shí)施例中,隨著應(yīng)用的變化,可以結(jié)合內(nèi)存回收功能動(dòng)態(tài)的調(diào)整每個(gè)隊(duì) 列中的內(nèi)存塊的數(shù)量,例如,應(yīng)用系統(tǒng)已釋放的內(nèi)存塊是內(nèi)存堆最后一次分割的內(nèi)存塊時(shí), 回收該內(nèi)存塊。在一個(gè)實(shí)施例中,較優(yōu)的,在內(nèi)存堆中分割與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊,并 分配給應(yīng)用,可以從內(nèi)存堆的底部依次分割與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊。這樣就可以避免內(nèi)存堆被分割成無數(shù)零亂的碎片,提高內(nèi)存的利用率。從內(nèi)存堆的底部依次分割與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊之后,可以選擇在內(nèi) 存堆頭部保存已分配的內(nèi)存塊地址與內(nèi)存堆地址形成的偏移量,并將偏移量進(jìn)行排序;根 據(jù)排序結(jié)果確定內(nèi)存堆即將回收的內(nèi)存塊的地址。根據(jù)內(nèi)存堆頭部保存的偏移量,就可以 顯而易見地判斷出此時(shí)內(nèi)存堆應(yīng)該回收的內(nèi)存塊的地址,減少計(jì)算量。例如,若偏移量是內(nèi)存塊與內(nèi)存堆的頭部地址間的偏移量,形成一個(gè)由大到小排 序的數(shù)組,那么最后一塊從內(nèi)存堆中分割出來的內(nèi)存塊的偏移量是數(shù)組中的最后一個(gè),也 即是最小的一個(gè);如果偏移量是內(nèi)存塊與內(nèi)存堆的尾部地址的偏移量,可以將偏移量按從 小到大進(jìn)行排序,形成一個(gè)由小到大排序的數(shù)組,那么最后一塊從內(nèi)存堆中分割出來的內(nèi) 存塊的偏移量是數(shù)組中的最后一個(gè),也即是最大的一個(gè)。在本發(fā)明實(shí)施例中,當(dāng)應(yīng)用系統(tǒng)改變,或者應(yīng)用系統(tǒng)的內(nèi)存需求改變時(shí),根據(jù)改變 后的應(yīng)用系統(tǒng)的內(nèi)存需求重新配置至少一個(gè)隊(duì)列,避免了隊(duì)列配置的尺寸不符合當(dāng)前應(yīng)用 系統(tǒng),導(dǎo)致隊(duì)列中存儲(chǔ)的內(nèi)存塊無法使用的情況。綜上可得,本發(fā)明實(shí)施例可以根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需要靈活地來劃分內(nèi)存,但是 又會(huì)隨著應(yīng)用的變化,結(jié)合內(nèi)存回收功能來動(dòng)態(tài)的調(diào)整每個(gè)隊(duì)列中的內(nèi)存塊的數(shù)量,最終 每個(gè)隊(duì)列形成固定尺寸大小如圖2所示隊(duì)列,但是具體的尺寸大小與圖2所示不一定相同, 此處僅僅是對(duì)隊(duì)列的尺寸進(jìn)行示意。根據(jù)本發(fā)明實(shí)施例能夠解決內(nèi)存碎片、靈活性差等問 題,同時(shí)還能保證較高的內(nèi)存利用率。現(xiàn)對(duì)本發(fā)明實(shí)施例提供的內(nèi)存管理方法進(jìn)行說明,參見圖4,包括如下步驟步驟402、結(jié)合應(yīng)用的內(nèi)存需求,劃分足量的內(nèi)存作為動(dòng)態(tài)內(nèi)存管理的內(nèi)存堆;以 及設(shè)置管理固定尺寸內(nèi)存塊的隊(duì)列,這些隊(duì)列初始為空隊(duì)列;步驟404、隨著應(yīng)用申請(qǐng)內(nèi)存使用,動(dòng)態(tài)管理的內(nèi)存堆根據(jù)申請(qǐng)的情況進(jìn)行動(dòng)態(tài)的 劃分,每次申請(qǐng)的內(nèi)存從內(nèi)存堆中的底部進(jìn)行分配,同時(shí)保存已經(jīng)分配的內(nèi)存地址與堆頭 部地址形成的偏移量在堆開始部分,依次形成一個(gè)由大到小排序好的數(shù)組;步驟406、如果內(nèi)存釋放,那么把釋放的內(nèi)存存放在內(nèi)存塊隊(duì)列中,隊(duì)列形成后直 接使用釋放但未回收的內(nèi)存來存放內(nèi)存信息,來形成一個(gè)單向鏈表;步驟408、如果應(yīng)用模型發(fā)生變化,當(dāng)前形成的各種尺寸隊(duì)列中的內(nèi)存塊的數(shù)量不 再符合最新的應(yīng)用,那么需要把各個(gè)隊(duì)列中的內(nèi)存回收到內(nèi)存堆中,重新生成隊(duì)列來滿足 應(yīng)用。為使得本發(fā)明實(shí)施例的目的、技術(shù)方案以及優(yōu)點(diǎn)更加清晰,下面以具體實(shí)施例進(jìn) 一步對(duì)本發(fā)明實(shí)施例進(jìn)行詳細(xì)說明。本發(fā)明實(shí)施例主要是通過應(yīng)用對(duì)內(nèi)存的申請(qǐng)和釋放來自適應(yīng)地形成按照不同尺 寸劃分的隊(duì)列,同時(shí)在形成隊(duì)列過程中使用釋放的內(nèi)存存放構(gòu)建隊(duì)列的信息。而且為了更 好的處理內(nèi)存的釋放和回收,在內(nèi)存申請(qǐng)的時(shí)候,根據(jù)內(nèi)存地址的偏移量形成了一個(gè)由大 到小排序好的數(shù)組,便于使用算法查找等處理,為說明得更詳細(xì),現(xiàn)以具體實(shí)例進(jìn)行說明, 具體如圖5所示,圖5中示意了一個(gè)內(nèi)存堆,其堆頭部地址為0x80000,其堆底部地址為 0x90000,從該內(nèi)存堆的底部進(jìn)行內(nèi)存塊的劃分,依次劃分的內(nèi)存塊尺寸大小為8、34、128、
64、24、64、8......,其中內(nèi)存堆頭部存儲(chǔ)了已分配的內(nèi)存塊地址與內(nèi)存堆地址形成的偏移
量,從圖中可以看出,分配的內(nèi)存塊有四種尺寸8、24、64、128 ;據(jù)此生成的數(shù)組(存儲(chǔ)在隊(duì)
7列的表頭)也就依次包括0xFFF8、OxFFEO、OxFFAO、0xFF20......;其中,尺寸為64的列表
為空NULL。下面各具體實(shí)施例均以圖5為示意圖。實(shí)施例一內(nèi)存申請(qǐng)首先,根據(jù)申請(qǐng)內(nèi)存的大小,查找對(duì)應(yīng)尺寸的隊(duì)列是否有空閑。若不空,則從隊(duì)列 鏈表頭取一塊內(nèi)存,修改鏈表信息,返回地址;如若申請(qǐng)96字節(jié)的內(nèi)存,那么需要首先判斷 128字節(jié)的隊(duì)列是否為空,從圖5上看隊(duì)列不空那么就從隊(duì)列中分配一塊。若空,則需要從內(nèi)存堆中分割一塊對(duì)應(yīng)尺寸的內(nèi)存。首先需要判斷內(nèi)存堆中剩余 內(nèi)存量是否能滿足申請(qǐng),如不滿足,則申請(qǐng)失?。蝗魸M足則從內(nèi)存堆的底部分割一塊對(duì)應(yīng)大 小尺寸的內(nèi)存,修改內(nèi)存堆信息,計(jì)算偏移量,最后返回地址。如果申請(qǐng)60字節(jié)的內(nèi)存,如 圖5中該隊(duì)列為空,那么就從內(nèi)存堆中挖出一個(gè)64字節(jié)的內(nèi)存給應(yīng)用。實(shí)施例二內(nèi)存釋放首先,根據(jù)地址確定需要釋放的內(nèi)存尺寸,根據(jù)地址計(jì)算偏移量,在偏移量數(shù)組中 通過查找算法(例如二分法)查找到該地址,由前后偏移量可確認(rèn)尺寸。其次,根據(jù)地址判斷該內(nèi)存是否需要回收,如果需要,直接把內(nèi)存釋放到內(nèi)存堆 中,返回釋放完成;如圖5中,當(dāng)前釋放的為粗線框所示的128字節(jié)的內(nèi)存,由于當(dāng)前的內(nèi)存 塊是系統(tǒng)最后一次分配出去的內(nèi)存,因此在釋放的時(shí)候,可以直接回收。否則,把內(nèi)存存放 到對(duì)應(yīng)尺寸的隊(duì)列中;在需要釋放的內(nèi)存塊中保存之前的鏈表信息,然后把該內(nèi)存放在鏈 表頭。實(shí)施例三內(nèi)存回收在本實(shí)施例中,內(nèi)存回收的原則是回收最后一次從堆中分割出來并且空閑的內(nèi) 存,處理過程如下首先,偏移量數(shù)組是在內(nèi)存申請(qǐng)時(shí)候,動(dòng)態(tài)生成的由大到小排序的數(shù)組,因此數(shù)組 的最后一個(gè)偏移地址即是當(dāng)前需要回收的內(nèi)存;根據(jù)該內(nèi)存的地址和偏移值,計(jì)算內(nèi)存尺 寸;如圖5中,可以看出粗線框中的128字節(jié)的內(nèi)存是系統(tǒng)最后一次分配出去的內(nèi)存,因此 在回收的時(shí)候,需要先回收該內(nèi)存塊。然后,根據(jù)尺寸和內(nèi)存地址,在相應(yīng)的鏈表中查找,如果未找到,標(biāo)記該內(nèi)存需要 回收,在內(nèi)存釋放時(shí)進(jìn)行回收;即,若確定當(dāng)前需要回收128字節(jié)的內(nèi)存塊,那么需要在相 應(yīng)的內(nèi)存空閑隊(duì)列中查找這一內(nèi)存塊。如果找到,從鏈表中摘除該內(nèi)存,修改鏈表信息,把內(nèi)存回收到內(nèi)存堆中。如圖5 所示,如果粗線框中128字節(jié)的內(nèi)存正好在對(duì)應(yīng)的空閑鏈表中,那么就直接進(jìn)行回收。重復(fù)上述步驟,直到不需要回收為止。基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供了一種內(nèi)存管理裝置,其結(jié)構(gòu)示意圖如 圖6,包括配置單元601,用于根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列,不同隊(duì)列管理不 同尺寸的內(nèi)存塊,各隊(duì)列管理的內(nèi)存塊尺寸由所述內(nèi)存需求確定,應(yīng)用系統(tǒng)中包含至少一 個(gè)應(yīng)用;存儲(chǔ)單元602,用于將應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的 隊(duì)列中;分配單元603,用于當(dāng)應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在各隊(duì)列中查找與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊并分配給應(yīng)用。在一個(gè)實(shí)施例中,配置單元601可以進(jìn)一步用于為應(yīng)用系統(tǒng)配置內(nèi)存量大于應(yīng)用 系統(tǒng)的內(nèi)存需求的內(nèi)存堆;分配單元603可以進(jìn)一步用于在內(nèi)存堆中分割與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存 塊,并分配給應(yīng)用。在一個(gè)實(shí)施例中,分配單元603可以進(jìn)一步用于若內(nèi)存堆中剩余內(nèi)存量小于申請(qǐng) 的內(nèi)存塊尺寸時(shí),通知應(yīng)用申請(qǐng)失敗。在一個(gè)實(shí)施例中,如圖7所示,內(nèi)存管理裝置還可以包括回收單元701,用于應(yīng)用系統(tǒng)已釋放的內(nèi)存塊是內(nèi)存堆最后一次分割的內(nèi)存塊時(shí), 回收該內(nèi)存塊。在一個(gè)實(shí)施例中,分配單元603可以進(jìn)一步用于從內(nèi)存堆的底部依次分割與申請(qǐng) 的內(nèi)存塊尺寸匹配的內(nèi)存塊。在一個(gè)實(shí)施例中,回收單元701可以進(jìn)一步用于在內(nèi)存堆頭部保存已分配的內(nèi)存 塊地址與內(nèi)存堆地址形成的偏移量,并將偏移量進(jìn)行排序;以及,根據(jù)排序結(jié)果確定內(nèi)存堆 即將回收的內(nèi)存塊的地址。在一個(gè)實(shí)施例中,配置單元601可以進(jìn)一步用于當(dāng)應(yīng)用系統(tǒng)改變,或者應(yīng)用系統(tǒng) 的內(nèi)存需求改變時(shí),根據(jù)改變后的應(yīng)用系統(tǒng)的內(nèi)存需求重新配置至少一個(gè)隊(duì)列。從以上的描述中,可以看出,本發(fā)明實(shí)現(xiàn)了如下技術(shù)效果在本發(fā)明實(shí)施例中,應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的隊(duì) 列中,當(dāng)應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在各隊(duì)列中查找與申請(qǐng)的內(nèi)存塊尺寸匹配 的內(nèi)存塊并分配給應(yīng)用,充分利用了未被回收的內(nèi)存塊,提高內(nèi)存的利用率。顯然,本領(lǐng)域的技術(shù)人員應(yīng)該明白,上述的本發(fā)明的各模塊或各步驟可以用通用 的計(jì)算裝置來實(shí)現(xiàn),它們可以集中在單個(gè)的計(jì)算裝置上,或者分布在多個(gè)計(jì)算裝置所組成 的網(wǎng)絡(luò)上,可選地,它們可以用計(jì)算裝置可執(zhí)行的程序代碼來實(shí)現(xiàn),從而,可以將它們存儲(chǔ) 在存儲(chǔ)裝置中由計(jì)算裝置來執(zhí)行,并且在某些情況下,可以以不同于此處的順序執(zhí)行所示 出或描述的步驟,或者將它們分別制作成各個(gè)集成電路模塊,或者將它們中的多個(gè)模塊或 步驟制作成單個(gè)集成電路模塊來實(shí)現(xiàn)。這樣,本發(fā)明不限制于任何特定的硬件和軟件結(jié)合。以上所述僅為本發(fā)明的優(yōu)選實(shí)施例而已,并不用于限制本發(fā)明,對(duì)于本領(lǐng)域的技 術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修 改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
一種內(nèi)存管理方法,其特征在于,包括根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列,不同隊(duì)列管理不同尺寸的內(nèi)存塊,各隊(duì)列管理的內(nèi)存塊尺寸由所述內(nèi)存需求確定,所述應(yīng)用系統(tǒng)中包含至少一個(gè)應(yīng)用;將所述應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的隊(duì)列中;以及當(dāng)所述應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在所述各隊(duì)列中查找與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊并分配給所述應(yīng)用。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少 一個(gè)隊(duì)列之前,包括為所述應(yīng)用系統(tǒng)配置內(nèi)存量大于所述應(yīng)用系統(tǒng)的內(nèi)存需求的內(nèi)存堆;以及 在所述各隊(duì)列中未查找與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊并分配給所述應(yīng)用時(shí),包括在所述內(nèi)存堆中分割與所述申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊,并分配給所述應(yīng)用。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,若所述內(nèi)存堆中剩余內(nèi)存量小于所述申 請(qǐng)的內(nèi)存塊尺寸時(shí),通知所述應(yīng)用申請(qǐng)失敗。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述應(yīng)用系統(tǒng)已釋放的內(nèi)存塊是所述內(nèi) 存堆最后一次分割的內(nèi)存塊時(shí),回收該內(nèi)存塊。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,在所述內(nèi)存堆中分割與所述申請(qǐng)的內(nèi)存 塊尺寸匹配的內(nèi)存塊,并分配給所述應(yīng)用,包括從所述內(nèi)存堆的底部依次分割與所述申請(qǐng) 的內(nèi)存塊尺寸匹配的內(nèi)存塊。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,從所述內(nèi)存堆的底部依次分割與所述申 請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊之后,還包括在所述內(nèi)存堆頭部保存已分配的內(nèi)存塊地址與所述內(nèi)存堆地址形成的偏移量,并將所 述偏移量進(jìn)行排序;以及根據(jù)排序結(jié)果確定所述內(nèi)存堆即將回收的內(nèi)存塊的地址。
7.根據(jù)權(quán)利要求1至6任一項(xiàng)所述的方法,其特征在于,當(dāng)所述應(yīng)用系統(tǒng)改變,或者 所述應(yīng)用系統(tǒng)的內(nèi)存需求改變時(shí),根據(jù)改變后的應(yīng)用系統(tǒng)的內(nèi)存需求重新配置至少一個(gè)隊(duì) 列。
8.—種內(nèi)存管理裝置,其特征在于,包括配置單元,用于根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列,不同隊(duì)列管理不同尺寸 的內(nèi)存塊,各隊(duì)列管理的內(nèi)存塊尺寸由所述內(nèi)存需求確定,所述應(yīng)用系統(tǒng)中包含至少一個(gè) 應(yīng)用;存儲(chǔ)單元,用于將所述應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的隊(duì)列中;分配單元,用于當(dāng)所述應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在所述各隊(duì)列中查找與 申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊并分配給所述應(yīng)用。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述配置單元,進(jìn)一步用于為所述應(yīng)用系 統(tǒng)配置內(nèi)存量大于所述應(yīng)用系統(tǒng)的內(nèi)存需求的內(nèi)存堆;所述分配單元,進(jìn)一步用于在所述內(nèi)存堆中分割與所述申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存 塊,并分配給所述應(yīng)用。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述分配單元,進(jìn)一步用于若所述內(nèi)存 堆中剩余內(nèi)存量小于所述申請(qǐng)的內(nèi)存塊尺寸時(shí),通知所述應(yīng)用申請(qǐng)失敗。
11.根據(jù)權(quán)利要求9所述的裝置,其特征在于,還包括回收單元,用于所述應(yīng)用系統(tǒng)已釋放的內(nèi)存塊是所述內(nèi)存堆最后一次分割的內(nèi)存塊 時(shí),回收該內(nèi)存塊。
12.根據(jù)權(quán)利要求11所述的裝置,其特征在于,所述分配單元,進(jìn)一步用于從所述內(nèi)存 堆的底部依次分割與所述申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述回收單元,進(jìn)一步用于在所述內(nèi)存 堆頭部保存已分配的內(nèi)存塊地址與所述內(nèi)存堆地址形成的偏移量,并將所述偏移量進(jìn)行排 序;以及,根據(jù)排序結(jié)果確定所述內(nèi)存堆即將回收的內(nèi)存塊的地址。
14.根據(jù)權(quán)利要求9至13任一項(xiàng)所述的裝置,其特征在于,所述配置單元,進(jìn)一步用于 當(dāng)所述應(yīng)用系統(tǒng)改變,或者所述應(yīng)用系統(tǒng)的內(nèi)存需求改變時(shí),根據(jù)改變后的應(yīng)用系統(tǒng)的內(nèi) 存需求重新配置至少一個(gè)隊(duì)列。
全文摘要
本發(fā)明公開了一種內(nèi)存管理方法和裝置,該方法包括根據(jù)應(yīng)用系統(tǒng)的內(nèi)存需求配置至少一個(gè)隊(duì)列,不同隊(duì)列管理不同尺寸的內(nèi)存塊,各隊(duì)列管理的內(nèi)存塊尺寸由所述內(nèi)存需求確定,所述應(yīng)用系統(tǒng)中包含至少一個(gè)應(yīng)用;將所述應(yīng)用系統(tǒng)已釋放且未被回收的內(nèi)存塊按尺寸存儲(chǔ)在對(duì)應(yīng)的隊(duì)列中;以及當(dāng)所述應(yīng)用系統(tǒng)中的應(yīng)用發(fā)起內(nèi)存塊申請(qǐng)時(shí),在所述各隊(duì)列中查找與申請(qǐng)的內(nèi)存塊尺寸匹配的內(nèi)存塊并分配給所述應(yīng)用。采用本發(fā)明能夠節(jié)省內(nèi)存。
文檔編號(hào)G06F12/02GK101984417SQ20101052942
公開日2011年3月9日 申請(qǐng)日期2010年11月1日 優(yōu)先權(quán)日2010年11月1日
發(fā)明者徐陽, 李愛華, 潘海兵 申請(qǐng)人:中興通訊股份有限公司