一種針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理方法,包括:(a)向服務(wù)器申請(qǐng)第一內(nèi)存塊,以供所述應(yīng)用單獨(dú)使用;(b)判斷所述服務(wù)器是否具有足夠的內(nèi)存空間;(c)在所述服務(wù)器有足夠的內(nèi)存空間時(shí),在所述第一內(nèi)存塊中分出一部分內(nèi)存區(qū)域以保存第一內(nèi)存分配信息;(d)對(duì)所述服務(wù)器的內(nèi)存和已申請(qǐng)的內(nèi)存塊進(jìn)行監(jiān)控,并且當(dāng)已申請(qǐng)的內(nèi)存塊中剩余的內(nèi)存已經(jīng)不足以供所述應(yīng)用中的多個(gè)進(jìn)程中的一個(gè)或多個(gè)使用時(shí),向所述服務(wù)器申請(qǐng)與已申請(qǐng)的內(nèi)存塊不同的第二內(nèi)存塊、在所述第二內(nèi)存塊中分出一部分內(nèi)存區(qū)域來(lái)保存第二內(nèi)存分配信息以及更新所述第一內(nèi)存塊中所述第一內(nèi)存分配信息;以及重復(fù)執(zhí)行步驟(d),直至所述應(yīng)用結(jié)束。本發(fā)明還公開了一種針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理裝置。
【專利說(shuō)明】一種針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,更具體來(lái)說(shuō),涉及針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理方法和裝置。
【背景技術(shù)】
[0002]現(xiàn)在大部分內(nèi)存分配是使用alloc相關(guān)函數(shù)(包括malloc, calloc和relloc),在釋放的時(shí)候使用free函數(shù)。
[0003]這樣申請(qǐng)內(nèi)存的方式具有如下幾個(gè)問題:第一,在系統(tǒng)中申請(qǐng)的內(nèi)存大都不是連續(xù)的,尤其是在需要大量申請(qǐng)內(nèi)存的程序里,這樣操作會(huì)對(duì)系統(tǒng)內(nèi)存分配造成壓力。第二,對(duì)于申請(qǐng)的內(nèi)存的使用周期無(wú)法做精準(zhǔn)估計(jì),可能在使用的過程中出現(xiàn)異常釋放了,但是后面程序依然在訪問該地址,或者申請(qǐng)了沒有釋放,都會(huì)引起內(nèi)存使用失敗的情況。第三,每個(gè)內(nèi)存地址都需要額外的指針存放分配的地址空間一直等到其被釋放。在程序中自始至終都需要一個(gè)指針存放該內(nèi)存地址的信息,這在大量申請(qǐng)內(nèi)存的程序里是一個(gè)很可觀的內(nèi)存開銷。第四,無(wú)法做內(nèi)存使用量的統(tǒng)計(jì)。雖然在申請(qǐng)內(nèi)存的時(shí)候有內(nèi)存申請(qǐng)大小的變量,但是在釋放的時(shí)候只有一個(gè)地址,沒有釋放大小的指針。所以在統(tǒng)計(jì)內(nèi)存使用量的時(shí)候需要額外存放變量來(lái)記錄指針指向的申請(qǐng)的內(nèi)存的容量。在數(shù)據(jù)量較大的時(shí)候,這個(gè)內(nèi)存開銷也很可觀。
【發(fā)明內(nèi)容】
[0004]現(xiàn)有內(nèi)存處理機(jī)制有上述四點(diǎn)缺陷,使得直接使用內(nèi)存分配函數(shù)的方式在要求比較高的程序中存在一定的困難。為解決上述問題中的至少一個(gè),根據(jù)本發(fā)明的一個(gè)方面,提供了一種針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理方法,包括:(a)向服務(wù)器申請(qǐng)第一內(nèi)存塊,以供所述應(yīng)用單獨(dú)使用;(b)判斷所述服務(wù)器是否具有足夠的內(nèi)存空間;(c)在所述服務(wù)器有足夠的內(nèi)存空間時(shí),在所述第一內(nèi)存塊中分出一部分內(nèi)存區(qū)域以保存第一內(nèi)存分配信息;(d)對(duì)所述服務(wù)器的內(nèi)存和已申請(qǐng)的內(nèi)存塊進(jìn)行監(jiān)控,并且當(dāng)已申請(qǐng)的內(nèi)存塊中剩余的內(nèi)存已經(jīng)不足以供所述應(yīng)用中的多個(gè)進(jìn)程中的一個(gè)或多個(gè)使用時(shí),執(zhí)行下列子步驟:(d-1)向所述服務(wù)器申請(qǐng)與已申請(qǐng)的內(nèi)存塊不同的第二內(nèi)存塊,(d-2)在所述第二內(nèi)存塊中分出一部分內(nèi)存區(qū)域來(lái)保存第二內(nèi)存分配信息,以及(d-3)更新所述第一內(nèi)存塊中所述第一內(nèi)存分配信息;和(e)重復(fù)執(zhí)行步驟(d),直至所述應(yīng)用結(jié)束。
[0005]上述內(nèi)存管理方法還可包括:(f)在所述應(yīng)用結(jié)束后,對(duì)所述應(yīng)用已申請(qǐng)的所有內(nèi)存進(jìn)行釋放。
[0006]在上述內(nèi)存管理方法中,如果在步驟(b)中判斷出所述服務(wù)器不具有足夠的內(nèi)存空間,則所述應(yīng)用退出并報(bào)錯(cuò)。
[0007]在上述內(nèi)存管理方法中,所述第一內(nèi)存分配信息包括:所述第一內(nèi)存塊的起始位置、所述第一內(nèi)存塊的結(jié)束位置以及所述第一內(nèi)存塊的擴(kuò)展信息。
[0008]在上述內(nèi)存管理方法中,所述第一內(nèi)存塊的擴(kuò)展信息指示后續(xù)申請(qǐng)的擴(kuò)展內(nèi)存管理數(shù)組。
[0009]在上述內(nèi)存管理方法中,所述第二內(nèi)存分配信息包括:所述第二內(nèi)存塊的起始位置、所述第二內(nèi)存塊的結(jié)束位置以及所述第二內(nèi)存塊的擴(kuò)展信息。
[0010]在上述內(nèi)存管理方法中,步驟(d-3)包括:將所述第二內(nèi)存塊的管理數(shù)組指針寫入所述第一內(nèi)存塊的擴(kuò)展信息。
[0011]在上述內(nèi)存管理方法中,所申請(qǐng)的第二內(nèi)存塊的大小根據(jù)下式來(lái)確定:第二內(nèi)存塊的大小=(應(yīng)用后續(xù)啟動(dòng)進(jìn)程量估值+等待進(jìn)程量)X單個(gè)進(jìn)程使用量估值X 1.5。
[0012]在上述內(nèi)存管理方法中,若所述服務(wù)器的空間不足以提供所述第二內(nèi)存塊,則將申請(qǐng)的進(jìn)程置入等待隊(duì)列,待已申請(qǐng)的內(nèi)存塊內(nèi)空閑值或所述服務(wù)器的內(nèi)存空間滿足進(jìn)程申請(qǐng)要求后,以先進(jìn)先出的順序?yàn)檫M(jìn)程分配內(nèi)存。
[0013]在上述內(nèi)存管理方法中,所述第一內(nèi)存分配信息和所述第二內(nèi)存分配信息適于內(nèi)存使用統(tǒng)計(jì)。
[0014]根據(jù)本發(fā)明的另一方面,提供了一種針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理裝置,包括:第一申請(qǐng)模塊,用于向服務(wù)器申請(qǐng)第一內(nèi)存塊,以供所述應(yīng)用單獨(dú)使用;判斷模塊,用于判斷所述服務(wù)器是否具有足夠的內(nèi)存空間;初始化模塊,用于在所述服務(wù)器有足夠的內(nèi)存空間時(shí),在所述第一內(nèi)存塊中分出一部分內(nèi)存區(qū)域以保存第一內(nèi)存分配信息;和監(jiān)控模塊,用于對(duì)所述服務(wù)器的內(nèi)存和已申請(qǐng)的內(nèi)存塊進(jìn)行監(jiān)控,其中,當(dāng)已申請(qǐng)的內(nèi)存塊中剩余的內(nèi)存已經(jīng)不足以供所述應(yīng)用中的多個(gè)進(jìn)程中的一個(gè)或多個(gè)使用時(shí),所述監(jiān)控模塊配置成向所述服務(wù)器申請(qǐng)與已申請(qǐng)的內(nèi)存塊不同的第二內(nèi)存塊,在所述第二內(nèi)存塊中分出一部分內(nèi)存區(qū)域來(lái)保存第二內(nèi)存分配信息,以及更新所述第一內(nèi)存塊中所述第一內(nèi)存分配信肩、O
[0015]上述內(nèi)存管理裝置還可包括:釋放模塊,用于在所述應(yīng)用結(jié)束后,對(duì)所述應(yīng)用已申請(qǐng)的所有內(nèi)存進(jìn)行釋放。
[0016]在上述內(nèi)存管理裝置中,所述第一內(nèi)存分配信息包括:所述第一內(nèi)存塊的起始位置、所述第一內(nèi)存塊的結(jié)束位置以及所述第一內(nèi)存塊的擴(kuò)展信息。
[0017]在上述內(nèi)存管理裝置中,所述第一內(nèi)存塊的擴(kuò)展信息指示后續(xù)申請(qǐng)的擴(kuò)展內(nèi)存管理數(shù)組。
[0018]在上述內(nèi)存管理裝置中,所述第二內(nèi)存分配信息包括:所述第二內(nèi)存塊的起始位置、所述第二內(nèi)存塊的結(jié)束位置以及所述第二內(nèi)存塊的擴(kuò)展信息。
[0019]在上述內(nèi)存管理裝置中,所述監(jiān)控模塊進(jìn)一步配置成將所述第二內(nèi)存塊的管理數(shù)組指針寫入所述第一內(nèi)存塊的擴(kuò)展信息。
[0020]在上述內(nèi)存管理裝置中,所申請(qǐng)的第二內(nèi)存塊的大小根據(jù)下式來(lái)確定:第二內(nèi)存塊的大小=(應(yīng)用后續(xù)啟動(dòng)進(jìn)程量估值+等待進(jìn)程量)X單個(gè)進(jìn)程使用量估值X 1.5。
[0021]在上述內(nèi)存管理裝置中,所述第一內(nèi)存分配信息和所述第二內(nèi)存分配信息適于內(nèi)存使用統(tǒng)計(jì)。
[0022]與一般的內(nèi)存分配使用方式相比,本發(fā)明的技術(shù)方案至少具有如下優(yōu)點(diǎn):第一,減少系統(tǒng)內(nèi)存分配的內(nèi)存碎片:由于大部分零碎的數(shù)據(jù)都是通過一大塊內(nèi)存統(tǒng)一分配的,故內(nèi)存碎片遠(yuǎn)遠(yuǎn)少于零碎數(shù)據(jù)直接申請(qǐng)內(nèi)存;第二,應(yīng)用程序不需要去管理內(nèi)存釋放和存在周期的問題:因?yàn)閼?yīng)用程序通過本系統(tǒng)申請(qǐng)的內(nèi)存僅僅是一整塊內(nèi)存的一部分,等本系統(tǒng)結(jié)束的時(shí)候會(huì)全部釋放,不需要應(yīng)用程序在使用的時(shí)候考慮內(nèi)存維護(hù)的問題;第三,可以做應(yīng)用程序的內(nèi)存使用統(tǒng)計(jì):因?yàn)樵谏暾?qǐng)內(nèi)存的時(shí)候會(huì)有申請(qǐng)的容量大小,而這個(gè)大小也會(huì)記錄在內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中,故在釋放的時(shí)候也會(huì)知道釋放的空間的大小,所以可以做應(yīng)用程序的申請(qǐng)內(nèi)存數(shù)的統(tǒng)計(jì)。
【專利附圖】
【附圖說(shuō)明】
[0023]在參照附圖閱讀了本發(fā)明的【具體實(shí)施方式】以后,本領(lǐng)域技術(shù)人員將會(huì)更清楚地了解本發(fā)明的各個(gè)方面。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是:這些附圖僅僅用于配合【具體實(shí)施方式】說(shuō)明本發(fā)明的技術(shù)方案,而并非意在對(duì)本發(fā)明的保護(hù)范圍構(gòu)成限制。
[0024]圖1是根據(jù)本發(fā)明的一個(gè)實(shí)施例的內(nèi)存管理方法流程圖;
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的進(jìn)程申請(qǐng)流程圖;
圖3是根據(jù)本發(fā)明的一個(gè)實(shí)施例的清空使用內(nèi)存的處理流程圖;
圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的清空所有使用內(nèi)存的處理流程圖。
【具體實(shí)施方式】
[0025]下面介紹的是本發(fā)明的多個(gè)可能實(shí)施例中的一些,旨在提供對(duì)本發(fā)明的基本了解,并不旨在確認(rèn)本發(fā)明的關(guān)鍵或決定性的要素或限定所要保護(hù)的范圍。容易理解,根據(jù)本發(fā)明的技術(shù)方案,在不變更本發(fā)明的實(shí)質(zhì)精神下,本領(lǐng)域的一般技術(shù)人員可以提出可相互替換的其它實(shí)現(xiàn)方式。因此,以下【具體實(shí)施方式】以及附圖僅是對(duì)本發(fā)明的技術(shù)方案的示例性說(shuō)明,而不應(yīng)當(dāng)視為本發(fā)明的全部或者視為對(duì)本發(fā)明技術(shù)方案的限定或限制。
[0026]參見圖1,圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的內(nèi)存管理方法流程圖。該內(nèi)存管理方法可包括如下步驟:第I步,應(yīng)用啟動(dòng)后,按照預(yù)先設(shè)定的初始值申請(qǐng)內(nèi)存;第2步,若服務(wù)器內(nèi)存足夠則對(duì)應(yīng)用分配初始內(nèi)存;若不夠則執(zhí)行第3步;第3步,程序退出,報(bào)初始化錯(cuò);第4步,在服務(wù)器剩余內(nèi)存夠分配時(shí),進(jìn)行內(nèi)存初始化,內(nèi)存初始化主要對(duì)內(nèi)存塊的信息進(jìn)行保存,對(duì)內(nèi)存的起始位置等信息進(jìn)行結(jié)構(gòu)話保存,并在內(nèi)存塊中申請(qǐng)一塊內(nèi)存區(qū)域,建立內(nèi)存管理數(shù)組,對(duì)內(nèi)存分配信息進(jìn)行保存;第5步,進(jìn)行動(dòng)態(tài)內(nèi)存調(diào)節(jié);第6步,應(yīng)用結(jié)束后對(duì)應(yīng)用申請(qǐng)的所有內(nèi)存進(jìn)行釋放。
[0027]其中,在第5步中,需要對(duì)服務(wù)器內(nèi)存和申請(qǐng)的內(nèi)存塊進(jìn)行監(jiān)控。若應(yīng)用進(jìn)程申請(qǐng)內(nèi)存,但申請(qǐng)的內(nèi)存塊剩余內(nèi)存已不足以供其使用,則按照下述算法從服務(wù)器中重新申請(qǐng)一塊內(nèi)存,將內(nèi)存的信息寫入新的內(nèi)存塊管理數(shù)據(jù)結(jié)構(gòu),并將新的內(nèi)存塊管理數(shù)據(jù)結(jié)構(gòu)指針寫入初始內(nèi)存數(shù)據(jù)結(jié)構(gòu)。
[0028]在一個(gè)優(yōu)選的實(shí)施例中,內(nèi)存擴(kuò)展算法可以如下所示:
新內(nèi)存值=(應(yīng)用后續(xù)啟動(dòng)進(jìn)程量估值+等待進(jìn)程量)*單個(gè)進(jìn)程使用量估值*1.50若服務(wù)器內(nèi)存不夠申請(qǐng),則將申請(qǐng)進(jìn)程放入等待隊(duì)列,等待內(nèi)存塊出現(xiàn)足夠的空閑內(nèi)存再對(duì)其進(jìn)行分配?;虻却?wù)器內(nèi)存剩余量滿足內(nèi)存擴(kuò)展算法需求后,重新申請(qǐng)擴(kuò)展內(nèi)存對(duì)其進(jìn)行內(nèi)存分配。
[0029]在一個(gè)具體的實(shí)施例中,可以采用內(nèi)存塊管理數(shù)據(jù)結(jié)構(gòu)來(lái)對(duì)申請(qǐng)的內(nèi)存塊進(jìn)行管理,其中內(nèi)存塊管理數(shù)據(jù)結(jié)構(gòu)包括頭指針、尾指針以及擴(kuò)展內(nèi)存塊的管理數(shù)據(jù)指針?!邦^指針”表示內(nèi)存塊起始的位置,“尾指針”表示內(nèi)存塊結(jié)束的位置,而“擴(kuò)展內(nèi)存塊的管理數(shù)組指針”則指向后續(xù)申請(qǐng)的擴(kuò)展內(nèi)存管理數(shù)組。每次新申請(qǐng)的擴(kuò)展內(nèi)存管理數(shù)組數(shù)據(jù)結(jié)構(gòu)可以與該結(jié)構(gòu)保持一致。
[0030]在上述具體的實(shí)施例中,每當(dāng)申請(qǐng)的內(nèi)存塊剩余內(nèi)存不足以供進(jìn)程使用時(shí),可從服務(wù)器中重新申請(qǐng)一塊內(nèi)存,將內(nèi)存的信息寫入新的內(nèi)存塊管理數(shù)據(jù)結(jié)構(gòu),并將新的內(nèi)存塊管理數(shù)據(jù)結(jié)構(gòu)指針寫入初始內(nèi)存數(shù)據(jù)結(jié)構(gòu)中的“擴(kuò)展內(nèi)存塊的管理數(shù)組指針”項(xiàng)。
[0031]圖1的技術(shù)方案由于直接向系統(tǒng)申請(qǐng)一塊內(nèi)存區(qū)域供應(yīng)用程序使用,并將此內(nèi)存區(qū)域的大小等信息存放在管理的數(shù)組中,可避免出現(xiàn)不連續(xù)的內(nèi)存分配的問題,減輕了內(nèi)存分配的壓力。另外,圖1所示的技術(shù)方案為進(jìn)程在已經(jīng)分配的一塊內(nèi)存區(qū)域中分配其所需要的內(nèi)存區(qū)域大小,并且在剩余內(nèi)存空間不夠的情況下,根據(jù)應(yīng)用所在服務(wù)器內(nèi)存存量的情況,重新申請(qǐng)一塊大的內(nèi)存區(qū)域再進(jìn)行分配,或者系統(tǒng)拋錯(cuò)異常。這樣的技術(shù)方案可以將主動(dòng)權(quán)交給應(yīng)用程序,在出錯(cuò)的時(shí)候,應(yīng)用程序可以選擇是再次申請(qǐng)一塊內(nèi)存區(qū)域分配,或者是異常退出。另一方面,這樣做也可以優(yōu)化代碼的復(fù)雜結(jié)構(gòu),這是因?yàn)槿绻耆赡K控制內(nèi)存分配的話,在應(yīng)用每次申請(qǐng)內(nèi)存的時(shí)候,都需要對(duì)全部數(shù)組進(jìn)行遍歷查找才能找到合適的空間。此外,由于內(nèi)存塊管理數(shù)據(jù)結(jié)構(gòu)的獨(dú)特設(shè)計(jì),在內(nèi)存區(qū)域重新分配時(shí),只需要將內(nèi)存控制模塊的指針重新置為頭指針即可。最后,內(nèi)存釋放程序會(huì)在程序使用完成后對(duì)申請(qǐng)的內(nèi)存統(tǒng)一釋放。這樣首先能避免在程序中忘記釋放或釋放后再次使用的情況,其次能在釋放的時(shí)候統(tǒng)計(jì)已經(jīng)使用內(nèi)存的大小。這樣,在應(yīng)用程序中,程序員就不需要考慮申請(qǐng)的內(nèi)存空間是否已經(jīng)釋放的問題。
[0032]參考圖2,圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的進(jìn)程申請(qǐng)流程圖。如圖2所示,應(yīng)用的進(jìn)程在申請(qǐng)內(nèi)存時(shí),首先判斷現(xiàn)有的內(nèi)存塊中有沒有足夠的空間對(duì)其進(jìn)行分配,若有則根據(jù)申請(qǐng)的內(nèi)存大小,調(diào)整內(nèi)存管理數(shù)組的指針值以及記錄進(jìn)程的PID號(hào),并返回值給申請(qǐng)進(jìn)程。若沒有則執(zhí)行圖1中的第5步,重新申請(qǐng)內(nèi)存,或進(jìn)入等待隊(duì)列進(jìn)行比對(duì)。
[0033]參考圖3,圖3示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的清空使用內(nèi)存的處理流程圖。如圖3所示,應(yīng)用的單個(gè)進(jìn)程處理結(jié)束后,會(huì)根據(jù)當(dāng)初申請(qǐng)的內(nèi)存大小和PID號(hào),釋放內(nèi)存管理數(shù)組的指針值,并返回值給申請(qǐng)進(jìn)程。繼續(xù)參考圖4,圖4示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的清空所有使用內(nèi)存的處理流程圖。在圖4中,當(dāng)整個(gè)應(yīng)用結(jié)束后會(huì)對(duì)內(nèi)存管理數(shù)組進(jìn)行遍歷,逐一釋放后返回成功信息給應(yīng)用。
[0034]綜上所述,與一般的內(nèi)存分配使用方式不同,本發(fā)明的內(nèi)存管理機(jī)制將會(huì)動(dòng)態(tài)申請(qǐng)一塊內(nèi)存區(qū)域,然后對(duì)該區(qū)域的內(nèi)存進(jìn)行二次分配,將區(qū)域中不同部分分配給需要的進(jìn)程。該內(nèi)存管理機(jī)制至少具有如下優(yōu)點(diǎn):一、減少系統(tǒng)內(nèi)存分配的內(nèi)存碎片。由于大部分零碎的數(shù)據(jù)都是通過一大塊內(nèi)存統(tǒng)一分配的,故內(nèi)存碎片遠(yuǎn)遠(yuǎn)少于零碎數(shù)據(jù)直接申請(qǐng)內(nèi)存;二、應(yīng)用程序不需要去管理內(nèi)存釋放和存在周期的問題。因?yàn)閼?yīng)用程序通過本系統(tǒng)申請(qǐng)的內(nèi)存僅僅是一整塊內(nèi)存的一部分,等本系統(tǒng)結(jié)束的時(shí)候會(huì)全部釋放,不需要應(yīng)用程序在使用的時(shí)候考慮內(nèi)存維護(hù)的問題;三、可以做應(yīng)用程序的內(nèi)存使用統(tǒng)計(jì)。因?yàn)樵谏暾?qǐng)內(nèi)存的時(shí)候會(huì)有申請(qǐng)的容量大小,而這個(gè)大小也會(huì)記錄在內(nèi)存的數(shù)據(jù)結(jié)構(gòu)中,故在釋放的時(shí)候也會(huì)知道釋放的空間的大小,所以可以做應(yīng)用程序的申請(qǐng)內(nèi)存數(shù)的統(tǒng)計(jì)。
[0035]本發(fā)明的技術(shù)方案實(shí)現(xiàn)簡(jiǎn)單,功能完善,能解決很多容易出錯(cuò)的問題,可以作為中小型系統(tǒng)的內(nèi)存管理的模塊進(jìn)行使用,可以使程序在動(dòng)態(tài)申請(qǐng)內(nèi)存時(shí)更安全高效。
[0036]上文中,參照附圖描述了本發(fā)明的【具體實(shí)施方式】。但是,本領(lǐng)域中的普通技術(shù)人員能夠理解,在不偏離本發(fā)明的精神和范圍的情況下,還可以對(duì)本發(fā)明的【具體實(shí)施方式】作各種變更和替換。這些變更和替換都落在本發(fā)明權(quán)利要求書所限定的范圍內(nèi)。
【權(quán)利要求】
1.一種針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理方法,包括: (a)向服務(wù)器申請(qǐng)第一內(nèi)存塊,以供所述應(yīng)用單獨(dú)使用; (b)判斷所述服務(wù)器是否具有足夠的內(nèi)存空間; (C)在所述服務(wù)器有足夠的內(nèi)存空間時(shí),在所述第一內(nèi)存塊中分出一部分內(nèi)存區(qū)域以保存第一內(nèi)存分配信息; (d)對(duì)所述服務(wù)器的內(nèi)存和已申請(qǐng)的內(nèi)存塊進(jìn)行監(jiān)控,并且當(dāng)已申請(qǐng)的內(nèi)存塊中剩余的內(nèi)存已經(jīng)不足以供所述應(yīng)用中的多個(gè)進(jìn)程中的一個(gè)或多個(gè)使用時(shí),執(zhí)行下列步驟: (d-1)向所述服務(wù)器申請(qǐng)與已申請(qǐng)的內(nèi)存塊不同的第二內(nèi)存塊, (d-2)在所述第二內(nèi)存塊中分出一部分內(nèi)存區(qū)域來(lái)保存第二內(nèi)存分配信息,以及 (d-3)更新所述第一內(nèi)存塊中所述第一內(nèi)存分配信息;和 (e)重復(fù)執(zhí)行步驟(d),直至所述應(yīng)用結(jié)束。
2.如權(quán)利要求1所述的內(nèi)存管理方法,還包括: (f)在所述應(yīng)用結(jié)束后,對(duì)所述應(yīng)用已申請(qǐng)的所有內(nèi)存進(jìn)行釋放。
3.如權(quán)利要求1所述的內(nèi)存管理方法,其中,如果在步驟(b)中判斷出所述服務(wù)器不具有足夠的內(nèi)存空間,則所述應(yīng)用退出并報(bào)錯(cuò)。
4.如權(quán)利要求1所述的內(nèi)存管理方法,其中,所述第一內(nèi)存分配信息包括:所述第一內(nèi)存塊的起始位置、所述第一內(nèi)存塊的結(jié)束位置以及所述第一內(nèi)存塊的擴(kuò)展信息。
5.如權(quán)利要求4所述的內(nèi)存管理方法,其中,所述第一內(nèi)存塊的擴(kuò)展信息指示后續(xù)申請(qǐng)的擴(kuò)展內(nèi)存管理數(shù)組。
6.如權(quán)利要求1所述的內(nèi)存管理方法,其中,所述第二內(nèi)存分配信息包括:所述第二內(nèi)存塊的起始位置、所述第二內(nèi)存塊的結(jié)束位置以及所述第二內(nèi)存塊的擴(kuò)展信息。
7.如權(quán)利要求4所述的內(nèi)存管理方法,其中,步驟(d-3)包括: 將所述第二內(nèi)存塊的管理數(shù)組指針寫入所述第一內(nèi)存塊的擴(kuò)展信息。
8.如權(quán)利要求1所述的內(nèi)存管理方法,其中,所申請(qǐng)的第二內(nèi)存塊的大小根據(jù)下式來(lái)確定: 第二內(nèi)存塊的大小=(應(yīng)用后續(xù)啟動(dòng)進(jìn)程量估值+等待進(jìn)程量)X單個(gè)進(jìn)程使用量估值 X1.5。
9.如權(quán)利要求1所述的內(nèi)存管理方法,其中,若所述服務(wù)器的空間不足以提供所述第二內(nèi)存塊,則將申請(qǐng)的進(jìn)程置入等待隊(duì)列,待已申請(qǐng)的內(nèi)存塊內(nèi)空閑值或所述服務(wù)器的內(nèi)存空間滿足進(jìn)程申請(qǐng)要求后,以先進(jìn)先出的順序?yàn)檫M(jìn)程分配內(nèi)存。
10.如權(quán)利要求1所述的內(nèi)存管理方法,其中,所述第一內(nèi)存分配信息和所述第二內(nèi)存分配信息適于內(nèi)存使用統(tǒng)計(jì)。
11.一種針對(duì)包括多個(gè)進(jìn)程的應(yīng)用的內(nèi)存管理裝置,包括: 第一申請(qǐng)模塊,用于向服務(wù)器申請(qǐng)第一內(nèi)存塊,以供所述應(yīng)用單獨(dú)使用; 判斷模塊,用于判斷所述服務(wù)器是否具有足夠的內(nèi)存空間; 初始化模塊,用于在所述服務(wù)器有足夠的內(nèi)存空間時(shí),在所述第一內(nèi)存塊中分出一部分內(nèi)存區(qū)域以保存第一內(nèi)存分配信息;和 監(jiān)控模塊,用于對(duì)所述服務(wù)器的內(nèi)存和已申請(qǐng)的內(nèi)存塊進(jìn)行監(jiān)控,其中,當(dāng)已申請(qǐng)的內(nèi)存塊中剩余的內(nèi)存已經(jīng)不足以供所述應(yīng)用中的多個(gè)進(jìn)程中的一個(gè)或多個(gè)使用時(shí),所述監(jiān)控模塊配置成向所述服務(wù)器申請(qǐng)與已申請(qǐng)的內(nèi)存塊不同的第二內(nèi)存塊,在所述第二內(nèi)存塊中分出一部分內(nèi)存區(qū)域來(lái)保存第二內(nèi)存分配信息,以及更新所述第一內(nèi)存塊中所述第一內(nèi)存分配信息。
12.如權(quán)利要求11所述的內(nèi)存管理裝置,還包括: 釋放模塊,用于在所述應(yīng)用結(jié)束后,對(duì)所述應(yīng)用已申請(qǐng)的所有內(nèi)存進(jìn)行釋放。
13.如權(quán)利要求11所述的內(nèi)存管理裝置,其中,所述第一內(nèi)存分配信息包括:所述第一內(nèi)存塊的起始位置、所述第一內(nèi)存塊的結(jié)束位置以及所述第一內(nèi)存塊的擴(kuò)展信息。
14.如權(quán)利要求13所述的內(nèi)存管理裝置,其中,所述第一內(nèi)存塊的擴(kuò)展信息指示后續(xù)申請(qǐng)的擴(kuò)展內(nèi)存管理數(shù)組。
15.如權(quán)利要求11所述的內(nèi)存管理裝置,其中,所述第二內(nèi)存分配信息包括:所述第二內(nèi)存塊的起始位置、所述第二內(nèi)存塊的結(jié)束位置以及所述第二內(nèi)存塊的擴(kuò)展信息。
16.如權(quán)利要求13所述的內(nèi)存管理裝置,其中,所述監(jiān)控模塊進(jìn)一步配置成將所述第二內(nèi)存塊的管理數(shù)組指針寫入所述第一內(nèi)存塊的擴(kuò)展信息。
17.如權(quán)利要求11所述的內(nèi)存管理裝置,其中,所申請(qǐng)的第二內(nèi)存塊的大小根據(jù)下式來(lái)確定: 第二內(nèi)存塊的大小=(應(yīng)用后續(xù)啟動(dòng)進(jìn)程量估值+等待進(jìn)程量)X單個(gè)進(jìn)程使用量估值 X1.5。
18.如權(quán)利要求11所述的內(nèi)存管理裝置,其中,所述第一內(nèi)存分配信息和所述第二內(nèi)存分配信息適于內(nèi)存使用統(tǒng)計(jì)。
【文檔編號(hào)】G06F12/02GK104182350SQ201310203163
【公開日】2014年12月3日 申請(qǐng)日期:2013年5月28日 優(yōu)先權(quán)日:2013年5月28日
【發(fā)明者】李嶺, 張遜, 吳金壇, 呂蘇 申請(qǐng)人:中國(guó)銀聯(lián)股份有限公司