專(zhuān)利名稱(chēng):一種內(nèi)存分配方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及內(nèi)存管理技術(shù)領(lǐng)域,特別是涉及一種內(nèi)存分配方法及裝置。
背景技術(shù):
內(nèi)存(Memory)也被稱(chēng)為內(nèi)存儲(chǔ)器,其作用是用于暫時(shí)存放 CPU(CentralProcessing Unit,中央處理單元)中的運(yùn)算數(shù)據(jù),以及與硬盤(pán)等外部存儲(chǔ)器交 換的數(shù)據(jù)。內(nèi)存是計(jì)算機(jī)中重要的部件之一,它是與CPU進(jìn)行溝通的橋梁。計(jì)算機(jī)中所有 程序的運(yùn)行都是在內(nèi)存中進(jìn)行的,因此內(nèi)存的性能對(duì)計(jì)算機(jī)的影響非常大。在程序運(yùn)行過(guò)程中,會(huì)不斷地進(jìn)行內(nèi)存的申請(qǐng)及釋放。現(xiàn)有技術(shù)中,是由操作系統(tǒng) 采用一定的內(nèi)存分配策略向各個(gè)程序分配內(nèi)存。例如,常用的分配策略包括首次擬合法、最 佳擬合法以及最差擬合法等等。但是在實(shí)際應(yīng)用中,多次地向操作系統(tǒng)申請(qǐng)或釋放內(nèi)存,會(huì) 嚴(yán)重地加重系統(tǒng)的負(fù)擔(dān),最終導(dǎo)致程序的運(yùn)行效率下降。
發(fā)明內(nèi)容
本發(fā)明提供一種內(nèi)存分配方法及裝置,能夠減少向操作系統(tǒng)申請(qǐng)或釋放內(nèi)存的次 數(shù),減輕系統(tǒng)的負(fù)擔(dān),以適當(dāng)?shù)目臻g冗余,提升程序的運(yùn)行效率。本發(fā)明提供了如下方案一種內(nèi)存分配方法,包括程序啟動(dòng)時(shí),向操作系統(tǒng)請(qǐng)求預(yù)置大小的內(nèi)存空間;將所述內(nèi)存空間劃分為多個(gè)內(nèi)存塊,并將每個(gè)內(nèi)存塊劃分為多個(gè)內(nèi)存槽;保存各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址信息;當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置條件的內(nèi)存槽,并分配給 該進(jìn)程。優(yōu)選的,還包括保存內(nèi)存槽的數(shù)目和/或重用內(nèi)存槽地址信息。優(yōu)選的,一個(gè)內(nèi)存塊中各內(nèi)存槽的大小相等。優(yōu)選的,所述根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置條件的內(nèi)存槽,并分配給該程序 包括搜索大于所述請(qǐng)求的內(nèi)存大小的最小內(nèi)存槽;確定所述最小內(nèi)存槽所在的目標(biāo)內(nèi)存塊;在所述目標(biāo)內(nèi)存塊中搜索可用的內(nèi)存槽,將所述可用的內(nèi)存槽分配給該進(jìn)程。優(yōu)選的,所述進(jìn)程請(qǐng)求內(nèi)存的訪(fǎng)問(wèn)模式包括有名訪(fǎng)問(wèn),所述進(jìn)程請(qǐng)求內(nèi)存時(shí),請(qǐng)求 消息中還包括名稱(chēng)鍵值;所述獲取到符合預(yù)置條件的內(nèi)存槽之后還包括用所述請(qǐng)求消息中的名稱(chēng)鍵值對(duì)所述符合預(yù)置條件的內(nèi)存槽進(jìn)行命名;將所述名稱(chēng)鍵值與該內(nèi)存槽的地址通過(guò)哈希方法建立映射關(guān)系。優(yōu)選的,還包括
對(duì)所述請(qǐng)求的內(nèi)存空間進(jìn)行管理,提供內(nèi)存使用、內(nèi)存泄露和/或內(nèi)存跟蹤信息。一種內(nèi)存分配裝置,包括請(qǐng)求單元,用于程序啟動(dòng)時(shí),向操作系統(tǒng)請(qǐng)求預(yù)置大小的內(nèi)存空間;預(yù)分配單元,用于將所述內(nèi)存空間劃分為多個(gè)內(nèi)存塊,并將每個(gè)內(nèi)存塊劃分為多 個(gè)內(nèi)存槽;保存單元,用于保存各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址信息;分配單元,用于當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置條件的內(nèi) 存槽,并分配給該進(jìn)程。優(yōu)選的,所述保存單元還用于保存內(nèi)存槽的數(shù)目和/或重用內(nèi)存槽地址信息。優(yōu)選的,一個(gè)內(nèi)存塊中各內(nèi)存槽的大小相等。優(yōu)選的,所述分配單元包括內(nèi)存槽搜索子單元,用于搜索大于所述請(qǐng)求的內(nèi)存大小的最小內(nèi)存槽;內(nèi)存塊確定子單元,用于確定所述最小內(nèi)存槽所在的目標(biāo)內(nèi)存塊;內(nèi)存槽分配子單元,用于在所述目標(biāo)內(nèi)存塊中搜索可用的內(nèi)存槽,將所述可用的 內(nèi)存槽分配給該進(jìn)程。優(yōu)選的,所述進(jìn)程請(qǐng)求內(nèi)存的訪(fǎng)問(wèn)模式包括有名訪(fǎng)問(wèn),所述進(jìn)程請(qǐng)求內(nèi)存時(shí),請(qǐng)求 消息中還包括名稱(chēng)鍵值;還包括命名單元,用于所述獲取到符合預(yù)置條件的內(nèi)存槽之后,用所述請(qǐng)求消息中的名 稱(chēng)鍵值對(duì)所述符合預(yù)置條件的內(nèi)存槽進(jìn)行命名;映射單元,用于將所述名稱(chēng)鍵值與該內(nèi)存槽的地址通過(guò)哈希方法建立映射關(guān)系。優(yōu)選的,還包括內(nèi)存管理單元,用于對(duì)所述請(qǐng)求的內(nèi)存空間進(jìn)行管理,提供內(nèi)存使用、內(nèi)存泄露和 /或內(nèi)存跟蹤信息。根據(jù)本發(fā)明提供的具體實(shí)施例,本發(fā)明公開(kāi)了以下技術(shù)效果本發(fā)明在程序啟動(dòng)時(shí),向操作系統(tǒng)申請(qǐng)大的內(nèi)存空間;然后可以對(duì)該內(nèi)存空間進(jìn) 行預(yù)分配,即將所述內(nèi)存空間劃分為多個(gè)內(nèi)存塊,并將每個(gè)內(nèi)存塊劃分為多個(gè)內(nèi)存槽;保存 各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址信息;當(dāng)有進(jìn)程申請(qǐng)內(nèi)存時(shí),根據(jù)申請(qǐng)的內(nèi)存 大小獲取符合預(yù)置條件的內(nèi)存槽,并分配給該程序。這樣,相當(dāng)于實(shí)現(xiàn)了進(jìn)程對(duì)內(nèi)存的自行 分配,即只需要在啟動(dòng)時(shí)向操作系統(tǒng)申請(qǐng)一塊內(nèi)存空間,在進(jìn)行運(yùn)行過(guò)程中,需要申請(qǐng)或釋 放內(nèi)存時(shí),都可以不再需要向操作系統(tǒng)發(fā)起請(qǐng)求,而是直接由進(jìn)程進(jìn)行分配,因此,能夠減 少向操作系統(tǒng)申請(qǐng)或釋放內(nèi)存的次數(shù),減輕系統(tǒng)的負(fù)擔(dān)。其次,由于對(duì)內(nèi)存進(jìn)行了預(yù)分配,以?xún)?nèi)存槽為單位向進(jìn)程進(jìn)行內(nèi)存的分配,因此, 在向進(jìn)程分配內(nèi)存的過(guò)程中,不會(huì)產(chǎn)生內(nèi)存碎片,可以提高處理效率,相當(dāng)于以適當(dāng)?shù)目臻g 冗余,提升程序的運(yùn)行效率。
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所 需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施 例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是本發(fā)明實(shí)施例提供的方法的流程圖;圖2是本發(fā)明實(shí)施例進(jìn)行內(nèi)存預(yù)分配的示意圖;圖3是本發(fā)明實(shí)施例提供的裝置的示意圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的 范圍。參見(jiàn)圖1,本發(fā)明實(shí)施例提供的內(nèi)存分配方法包括以下步驟S101 程序啟動(dòng)時(shí),向操作系統(tǒng)申請(qǐng)預(yù)置大小的內(nèi)存空間;需要說(shuō)明的是,現(xiàn)有技術(shù)中,一個(gè)程序在開(kāi)始運(yùn)行之后,當(dāng)前需要多大的內(nèi)存就向 操作系統(tǒng)申請(qǐng)多大的內(nèi)存,操作系統(tǒng)根據(jù)當(dāng)前的內(nèi)存占用情況,選擇相應(yīng)的內(nèi)存空間給該 進(jìn)程。但是,在本發(fā)明實(shí)施例中,在程序開(kāi)始運(yùn)行之后,首先會(huì)向操作系統(tǒng)申請(qǐng)一塊大的 內(nèi)存空間,該內(nèi)存空間大于當(dāng)前所需的內(nèi)存。具體的,該足夠大的內(nèi)存空間可以是根據(jù)預(yù)先 根據(jù)具體的應(yīng)用場(chǎng)景設(shè)定的閾值來(lái)確定的,在程序的初始化過(guò)程中,就可以將該閾值傳遞 進(jìn)來(lái),并按照該閾值向操作系統(tǒng)進(jìn)行申請(qǐng)內(nèi)存空間。S102 將所述內(nèi)存空間劃分為多個(gè)內(nèi)存塊,并將每個(gè)內(nèi)存塊劃分為多個(gè)內(nèi)存槽;本發(fā)明實(shí)施例相當(dāng)于存在一個(gè)對(duì)內(nèi)存進(jìn)行預(yù)分配的過(guò)程,即在申請(qǐng)到相對(duì)較大的 內(nèi)存空間之后,首先將其劃分為多個(gè)內(nèi)存塊,然后再將每個(gè)內(nèi)存塊劃分為多個(gè)內(nèi)存槽。也就 是說(shuō),在程序進(jìn)行具體的內(nèi)存請(qǐng)求之前已經(jīng)對(duì)申請(qǐng)到的內(nèi)存空間進(jìn)行了劃分。其中,各個(gè)內(nèi)存塊的大小可以不同,但為了便于進(jìn)行分配,一個(gè)內(nèi)存塊中劃分的各 個(gè)內(nèi)存槽的大小可以是相等的。例如,具體的劃分可以如圖2所示。這里需要說(shuō)明的是,現(xiàn)有技術(shù)中可能也存在內(nèi)存塊的概念,但是與本發(fā)明實(shí)施例 中的內(nèi)存塊的形成過(guò)程是不同的,為避免造成混淆,同時(shí),為了說(shuō)明現(xiàn)有技術(shù)中內(nèi)存碎片的 概念,這里進(jìn)行簡(jiǎn)要地說(shuō)明。由前文所述,本發(fā)明實(shí)施例中,內(nèi)存塊是在對(duì)內(nèi)存空間進(jìn)行預(yù)分配時(shí)產(chǎn)生的,與具 體的內(nèi)存請(qǐng)求無(wú)關(guān)。但是,在現(xiàn)有技術(shù)中,并沒(méi)有對(duì)內(nèi)存進(jìn)行預(yù)分配的過(guò)程,操作系統(tǒng)在接 收到某內(nèi)存請(qǐng)求時(shí),根據(jù)請(qǐng)求的內(nèi)存大小以及內(nèi)存的占用情況進(jìn)行分配。假設(shè)進(jìn)程A請(qǐng)求 的內(nèi)存大小是10M,則操作系統(tǒng)會(huì)在內(nèi)存中選擇同樣為10M的內(nèi)存空間分配給該進(jìn)程,此 時(shí),操作系統(tǒng)選擇的這10M的內(nèi)存空間被稱(chēng)為一個(gè)內(nèi)存塊a,當(dāng)進(jìn)程A將這10M的內(nèi)存釋放 之后,該內(nèi)存塊a就成為空閑的內(nèi)存空間,即該內(nèi)存塊a可以分配給其他的進(jìn)程。例如某進(jìn) 程B請(qǐng)求的內(nèi)存大小為8M,此時(shí)根據(jù)內(nèi)存分配策略,就可能會(huì)從該內(nèi)存塊a中選擇8M的內(nèi) 存分配給進(jìn)程B。此時(shí)原內(nèi)存塊a中還有2M的內(nèi)存空閑(假設(shè)該過(guò)程中原內(nèi)存塊a的相鄰 內(nèi)存空間均一直被占用),這些空閑的內(nèi)存空間由于比較小,就可能會(huì)稱(chēng)為內(nèi)存碎片,即無(wú) 法滿(mǎn)足進(jìn)程對(duì)內(nèi)存大小的需求,使得這部分空間無(wú)法被任何進(jìn)程利用。顯然,如果不采用一 定的碎片處理策略,則隨著不斷地內(nèi)存申請(qǐng)及釋放,將會(huì)產(chǎn)生非常多的內(nèi)存碎片;如果對(duì)內(nèi)存碎片進(jìn)行處理,則將會(huì)耗費(fèi)系統(tǒng)的性能。總之,現(xiàn)有技術(shù)中,操作系統(tǒng)給進(jìn)程分配的內(nèi)存大小與進(jìn)程請(qǐng)求的內(nèi)存大小相同, 即進(jìn)程請(qǐng)求多少內(nèi)存,操作系統(tǒng)就給該進(jìn)程分配多少內(nèi)存,在多次的請(qǐng)求與釋放過(guò)程中,就 可能產(chǎn)生很多的內(nèi)存碎片;并且系統(tǒng)的內(nèi)存也會(huì)被分為一個(gè)個(gè)的內(nèi)存塊,每個(gè)內(nèi)存塊的大 小及占用狀態(tài)也可能在不斷地變化,使得內(nèi)存的分配過(guò)程顯得非常繁瑣。以首次擬合法為 例,操作系統(tǒng)每次為進(jìn)程選擇內(nèi)存時(shí),都需要從第一個(gè)內(nèi)存塊開(kāi)始向后進(jìn)行搜索,直到找到 大于當(dāng)前請(qǐng)求大小的內(nèi)存塊,從該內(nèi)存塊中取出與請(qǐng)求大小相等的內(nèi)存,分配給該進(jìn)程。S103 保存各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址信息;當(dāng)然,還可以保存內(nèi)存槽的數(shù)目,和/或,當(dāng)發(fā)生內(nèi)存槽重用時(shí),還可以保存重用 內(nèi)存槽地址等信息。S104:當(dāng)所述進(jìn)程請(qǐng)求內(nèi)存時(shí),根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置條件的內(nèi)存槽, 并分配給該進(jìn)程。當(dāng)一個(gè)進(jìn)程請(qǐng)求內(nèi)存時(shí),會(huì)攜帶有需要的內(nèi)存大小的信息,在本發(fā)明實(shí)施例中,并 不是為進(jìn)程選擇恰好與請(qǐng)求的大小相等的內(nèi)存,而是根據(jù)請(qǐng)求的內(nèi)存大小,選擇符合預(yù)置 條件的內(nèi)存槽。其中,具體的條件可以根據(jù)實(shí)際需要進(jìn)行設(shè)置,這里不做限定。例如,可以 選擇大于用戶(hù)請(qǐng)求的內(nèi)存大小的最小內(nèi)存槽;換言之,當(dāng)某進(jìn)程請(qǐng)求內(nèi)存時(shí),意味著有數(shù)據(jù) 需要存放在內(nèi)存中,因此,請(qǐng)求的內(nèi)存大小取決于需要存放的數(shù)據(jù)的大小,從這個(gè)意義上而 言,本發(fā)明實(shí)施例在選擇內(nèi)存槽時(shí),相當(dāng)于是選擇可以放下請(qǐng)求數(shù)據(jù)的最小內(nèi)存槽,然后將 該內(nèi)存槽分配給該進(jìn)程即可。其中,如果一個(gè)內(nèi)存塊中劃分的各個(gè)內(nèi)存槽的大小相等,則具體在進(jìn)行內(nèi)存槽的 選擇與分配時(shí)可以采用如下步驟進(jìn)行步驟一搜索大于所述請(qǐng)求的內(nèi)存大小的最小內(nèi)存槽;由于每個(gè)內(nèi)存塊的大小不等,但是一個(gè)內(nèi)存塊中劃分的各個(gè)內(nèi)存槽的大小相等, 因此,可以首先根據(jù)內(nèi)存槽的大小進(jìn)行搜索。當(dāng)然,也可能沒(méi)有符合該條件的內(nèi)存槽,此時(shí),說(shuō)明請(qǐng)求的內(nèi)存大小超出了范圍。步驟二 確定所述最小內(nèi)存槽所在的目標(biāo)內(nèi)存塊;搜索到大于所述請(qǐng)求的內(nèi)存大小的最小內(nèi)存槽之后,則可以找到這種大小的內(nèi)存 槽所在的內(nèi)存塊,該內(nèi)存塊就可以作為目標(biāo)內(nèi)存塊,即可以在該內(nèi)存塊中搜索尚未分配的、 可用的內(nèi)存槽。步驟三在所述目標(biāo)內(nèi)存塊中搜索可用的內(nèi)存槽,將所述可用的內(nèi)存槽分配給該 程序。當(dāng)然,可能存在該內(nèi)存塊中的所有內(nèi)存槽都已經(jīng)被占用的情況,在搜索時(shí)將無(wú)法 找到可用的內(nèi)存槽。此時(shí),可以對(duì)該內(nèi)存塊進(jìn)行擴(kuò)展,然后將新擴(kuò)展出的內(nèi)存槽分配給進(jìn)程 使用。也就是說(shuō),在本發(fā)明實(shí)施例中,內(nèi)存槽是預(yù)先劃分好的,在進(jìn)行內(nèi)存分配時(shí)也是按 內(nèi)存槽進(jìn)行分配,而進(jìn)程請(qǐng)求的內(nèi)存大小是不確定的,因此,在分配時(shí),為了不過(guò)多地浪費(fèi) 內(nèi)存,可以選擇一個(gè)大于進(jìn)程請(qǐng)求的內(nèi)存大小、又最接近該進(jìn)程請(qǐng)求的內(nèi)存大小的內(nèi)存槽。從以上所述還可以看出,在本發(fā)明實(shí)施例中,為進(jìn)程分配的內(nèi)存大小,大于進(jìn)程請(qǐng) 求的內(nèi)存大小,也就是每次分配時(shí)允許有一定的冗余。這樣做的好處在于,不會(huì)產(chǎn)生內(nèi)存碎片,每次分配內(nèi)存時(shí),只需要根據(jù)請(qǐng)求的內(nèi)存大小搜索符合條件的內(nèi)存槽即可,因此可以提
高處理效率。需要說(shuō)明的是,本發(fā)明實(shí)施例中,只有在程序啟動(dòng)時(shí),向操作系統(tǒng)發(fā)起一次內(nèi)存請(qǐng) 求,后續(xù)在進(jìn)程運(yùn)行過(guò)程中,都不需要再向操作系統(tǒng)請(qǐng)求內(nèi)存,相當(dāng)于實(shí)現(xiàn)了進(jìn)程對(duì)內(nèi)存的 自行分配與管理,因此,可以減少向操作系統(tǒng)請(qǐng)求或釋放內(nèi)存的次數(shù),減輕操作系統(tǒng)的負(fù) 擔(dān)。另外,在本發(fā)明實(shí)施例中,進(jìn)程訪(fǎng)問(wèn)內(nèi)存時(shí),可以采用匿名或者有名的方式。其中, 在有名訪(fǎng)問(wèn)方式下,相當(dāng)于給內(nèi)存槽加了人類(lèi)熟悉的名稱(chēng),從而可以加強(qiáng)進(jìn)程對(duì)內(nèi)存的訪(fǎng) 問(wèn)及管理。具體實(shí)現(xiàn)時(shí),如果需要以有名訪(fǎng)問(wèn)的方式訪(fǎng)問(wèn)內(nèi)存,則可以在請(qǐng)求內(nèi)存時(shí),在請(qǐng) 求消息中攜帶名稱(chēng)鍵值(該名稱(chēng)可以是任意的);在找到符合條件的內(nèi)存槽之后,可以用請(qǐng) 求消息中的名稱(chēng)鍵值對(duì)該符合預(yù)置條件的內(nèi)存槽進(jìn)行命名,并且將所述名稱(chēng)鍵值與該內(nèi)存 槽的地址通過(guò)哈希方法建立映射關(guān)系,這樣,通過(guò)內(nèi)存槽的名稱(chēng)鍵值就可以搜索到內(nèi)存槽, 直接進(jìn)行訪(fǎng)問(wèn)即可??傊?,通過(guò)以上所述可以看出,本發(fā)明實(shí)施例能夠提高內(nèi)存分配及管理的效率,并 減輕操作系統(tǒng)的負(fù)擔(dān)。此外,由于實(shí)現(xiàn)了進(jìn)程對(duì)內(nèi)存的自行分配,因此還可以提供進(jìn)程對(duì)內(nèi)存進(jìn)行管理 的接口,通過(guò)該接口,可以提供內(nèi)存使用報(bào)考、內(nèi)存泄露、內(nèi)存跟蹤等功能。與本發(fā)明實(shí)施例提供的內(nèi)存分配方法相對(duì)應(yīng),本發(fā)明實(shí)施例還提供了一種內(nèi)存分 配裝置,參見(jiàn)圖3,該裝置包括請(qǐng)求單元301,用于程序啟動(dòng)時(shí),向操作系統(tǒng)請(qǐng)求預(yù)置大小的內(nèi)存空間;預(yù)分配單元302,用于將所述內(nèi)存空間劃分為多個(gè)內(nèi)存塊,并將每個(gè)內(nèi)存塊劃分為 多個(gè)內(nèi)存槽;保存單元303,用于保存各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址信息;分配單元304,用于當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置條件的 內(nèi)存槽,并分配給該進(jìn)程。其中,保存單元303還可以用于保存內(nèi)存槽的數(shù)目和/或重用內(nèi)存槽地址信息。為了便于進(jìn)行內(nèi)存槽的分配,在進(jìn)行預(yù)分配時(shí),一個(gè)內(nèi)存塊中各內(nèi)存槽的大小可 以是相等的。相應(yīng)的,分配單元304可以包括以下子單元內(nèi)存槽搜索子單元,用于搜索大于所述請(qǐng)求的內(nèi)存大小的最小內(nèi)存槽;內(nèi)存塊確定子單元,用于確定所述最小內(nèi)存槽所在的目標(biāo)內(nèi)存塊;內(nèi)存槽分配子單元,用于在所述目標(biāo)內(nèi)存塊中搜索可用的內(nèi)存槽,將所述可用的 內(nèi)存槽分配給該進(jìn)程。其中,所述進(jìn)程請(qǐng)求內(nèi)存的訪(fǎng)問(wèn)模式包括有名訪(fǎng)問(wèn),所述進(jìn)程請(qǐng)求內(nèi)存時(shí),請(qǐng)求消 息中還包括名稱(chēng)鍵值;相應(yīng)的,該裝置還可以包括命名單元,用于所述獲取到符合預(yù)置條件的內(nèi)存槽之后,用所述請(qǐng)求消息中的名 稱(chēng)鍵值對(duì)所述符合預(yù)置條件的內(nèi)存槽進(jìn)行命名;映射單元,用于將所述名稱(chēng)鍵值與該內(nèi)存槽的地址通過(guò)哈希方法建立映射關(guān)系。此外,由于實(shí)現(xiàn)了進(jìn)程對(duì)內(nèi)存的自行分配,因此,在此基礎(chǔ)上,還可以實(shí)現(xiàn)進(jìn)程對(duì)內(nèi)存的管理,具體的,該裝置還可以包括內(nèi)存管理單元,用于對(duì)所述請(qǐng)求的內(nèi)存空間進(jìn)行管理,提供內(nèi)存使用、內(nèi)存泄露和 /或內(nèi)存跟蹤信息。總之,通過(guò)本發(fā)明實(shí)施例提供的內(nèi)存分配裝置,在程序啟動(dòng)時(shí),向操作系統(tǒng)申請(qǐng)足 夠大的內(nèi)存空間;然后可以對(duì)該內(nèi)存空間進(jìn)行預(yù)分配,即將所述內(nèi)存空間劃分為多個(gè)內(nèi)存 塊,并將每個(gè)內(nèi)存塊劃分為多個(gè)內(nèi)存槽;保存各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址 信息;當(dāng)有進(jìn)程申請(qǐng)內(nèi)存時(shí),根據(jù)申請(qǐng)的內(nèi)存大小獲取符合預(yù)置條件的內(nèi)存槽,并分配給該 程序。這樣,相當(dāng)于實(shí)現(xiàn)了進(jìn)程對(duì)內(nèi)存的自行分配,即只需要在啟動(dòng)時(shí)向操作系統(tǒng)申請(qǐng)一塊 內(nèi)存空間,在進(jìn)行運(yùn)行過(guò)程中,需要申請(qǐng)或釋放內(nèi)存時(shí),都可以不再需要向操作系統(tǒng)發(fā)起請(qǐng) 求,而是直接由進(jìn)程進(jìn)行分配,因此,能夠減少向操作系統(tǒng)申請(qǐng)或釋放內(nèi)存的次數(shù),減輕系 統(tǒng)的負(fù)擔(dān),并且以適當(dāng)?shù)目臻g冗余,提升程序的運(yùn)行效率。以上對(duì)本發(fā)明所提供的一種內(nèi)存分配方法及裝置,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用 了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解 本發(fā)明的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具 體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處。綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本發(fā)明 的限制。
權(quán)利要求
一種內(nèi)存分配方法,其特征在于,包括程序啟動(dòng)時(shí),向操作系統(tǒng)請(qǐng)求預(yù)置大小的內(nèi)存空間;將所述內(nèi)存空間劃分為多個(gè)內(nèi)存塊,并將每個(gè)內(nèi)存塊劃分為多個(gè)內(nèi)存槽;保存各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址信息;當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置條件的內(nèi)存槽,并分配給該進(jìn)程。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括 保存內(nèi)存槽的數(shù)目和/或重用內(nèi)存槽地址信息。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,一個(gè)內(nèi)存塊中各內(nèi)存槽的大小相等。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置 條件的內(nèi)存槽,并分配給該程序包括搜索大于所述請(qǐng)求的內(nèi)存大小的最小內(nèi)存槽; 確定所述最小內(nèi)存槽所在的目標(biāo)內(nèi)存塊;在所述目標(biāo)內(nèi)存塊中搜索可用的內(nèi)存槽,將所述可用的內(nèi)存槽分配給該進(jìn)程。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述進(jìn)程請(qǐng)求內(nèi)存的訪(fǎng)問(wèn)模式包括有名 訪(fǎng)問(wèn),所述進(jìn)程請(qǐng)求內(nèi)存時(shí),請(qǐng)求消息中還包括名稱(chēng)鍵值;所述獲取到符合預(yù)置條件的內(nèi)存 槽之后還包括用所述請(qǐng)求消息中的名稱(chēng)鍵值對(duì)所述符合預(yù)置條件的內(nèi)存槽進(jìn)行命名; 將所述名稱(chēng)鍵值與該內(nèi)存槽的地址通過(guò)哈希方法建立映射關(guān)系。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括對(duì)所述請(qǐng)求的內(nèi)存空間進(jìn)行管理,提供內(nèi)存使用、內(nèi)存泄露和/或內(nèi)存跟蹤信息。
7.—種內(nèi)存分配裝置,其特征在于,包括請(qǐng)求單元,用于程序啟動(dòng)時(shí),向操作系統(tǒng)請(qǐng)求預(yù)置大小的內(nèi)存空間; 預(yù)分配單元,用于將所述內(nèi)存空間劃分為多個(gè)內(nèi)存塊,并將每個(gè)內(nèi)存塊劃分為多個(gè)內(nèi) 存槽;保存單元,用于保存各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址信息; 分配單元,用于當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置條件的內(nèi)存槽, 并分配給該進(jìn)程。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述保存單元還用于保存內(nèi)存槽的數(shù)目 和/或重用內(nèi)存槽地址信息。
9.根據(jù)權(quán)利要求7所述的裝置,其特征在于,一個(gè)內(nèi)存塊中各內(nèi)存槽的大小相等。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述分配單元包括內(nèi)存槽搜索子單元,用于搜索大于所述請(qǐng)求的內(nèi)存大小的最小內(nèi)存槽; 內(nèi)存塊確定子單元,用于確定所述最小內(nèi)存槽所在的目標(biāo)內(nèi)存塊; 內(nèi)存槽分配子單元,用于在所述目標(biāo)內(nèi)存塊中搜索可用的內(nèi)存槽,將所述可用的內(nèi)存 槽分配給該進(jìn)程。
11.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述進(jìn)程請(qǐng)求內(nèi)存的訪(fǎng)問(wèn)模式包括有名 訪(fǎng)問(wèn),所述進(jìn)程請(qǐng)求內(nèi)存時(shí),請(qǐng)求消息中還包括名稱(chēng)鍵值;還包括命名單元,用于所述獲取到符合預(yù)置條件的內(nèi)存槽之后,用所述請(qǐng)求消息中的名稱(chēng)鍵值對(duì)所述符合預(yù)置條件的內(nèi)存槽進(jìn)行命名;映射單元,用于將所述名稱(chēng)鍵值與該內(nèi)存槽的地址通過(guò)哈希方法建立映射關(guān)系。
12.根據(jù)權(quán)利要求7所述的裝置,其特征在于,還包括內(nèi)存管理單元,用于對(duì)所述請(qǐng)求的內(nèi)存空間進(jìn)行管理,提供內(nèi)存使用、內(nèi)存泄露和/或 內(nèi)存跟蹤信息。
全文摘要
本發(fā)明公開(kāi)了一種內(nèi)存分配方法及裝置,其中,所述方法包括程序啟動(dòng)時(shí),向操作系統(tǒng)請(qǐng)求預(yù)置大小的內(nèi)存空間;將所述內(nèi)存空間劃分為多個(gè)內(nèi)存塊,并將每個(gè)內(nèi)存塊劃分為多個(gè)內(nèi)存槽;保存各內(nèi)存槽的大小及未使用內(nèi)存槽的起始地址信息;當(dāng)進(jìn)程請(qǐng)求內(nèi)存時(shí),根據(jù)請(qǐng)求的內(nèi)存大小獲取符合預(yù)置條件的內(nèi)存槽,并分配給該進(jìn)程。通過(guò)本發(fā)明,能夠減少向操作系統(tǒng)申請(qǐng)或釋放內(nèi)存的次數(shù),減輕系統(tǒng)的負(fù)擔(dān),以適當(dāng)?shù)目臻g冗余,提升程序的運(yùn)行效率。
文檔編號(hào)G06F12/06GK101853215SQ20101019336
公開(kāi)日2010年10月6日 申請(qǐng)日期2010年6月1日 優(yōu)先權(quán)日2010年6月1日
發(fā)明者宋仁春, 田歡春 申請(qǐng)人:恒生電子股份有限公司