專利名稱:一種內存管理方法、系統(tǒng)及服務器的制作方法
技術領域:
本發(fā)明屬于服務器技術領域,尤其涉及一種內存管理方法、系統(tǒng)及服務器。
背景技術:
傳統(tǒng)的內存分配是直接通過操作系統(tǒng)提供的函數(shù)來分配,其函數(shù)內部具體的執(zhí)行 過程如下所述 1.鎖上線程鎖,防止其它線程進入。 2.以4096字節(jié)的倍數(shù)取出內存塊(無論用戶需要多大的內存,都以4096為一頁 來分配)。 3.解除線程鎖,允許其它線程進入。
4.把成功分配的內存返回給用戶層。 上述過程在普通的程序中足以滿足需求,但對于服務器程序會大大降低程序性 能,其具體為 服務器對內存的分配和釋放頻率非常高,以游戲服務器為例,通常需要每秒100 萬次;服務器的內存分配者是由上百個線程來完成;由于傳統(tǒng)的函數(shù)里只有一個線程鎖, 這樣會降低程序的并發(fā)能力;而且,傳統(tǒng)的線程鎖是采用內核對象方式來處理,在內存分配 時需要用到復雜的算法,這將消耗大量的CPU資源,降低了程序的性能。
發(fā)明內容
本發(fā)明實施例的目的在于提供一種內存管理方法,旨在解決現(xiàn)有傳統(tǒng)的內存分配 機制難以滿足服務器對內存分配的要求的問題。 本發(fā)明實施例是這樣實現(xiàn)的,一種內存管理方法,所述方法包括下述步驟 根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括常用內存鏈表和大
內存鏈表; 接收用戶的內存申請請求,根據(jù)所述申請的內存大小,定位內存池; 當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取所述內存池的常用
內存鏈表的內存分配給申請用戶; 當定位到的內存池的常用內存鏈表不存在可用內存時,控制讀取所述內存池的大 內存鏈表的內存分配給申請用戶。 本發(fā)明實施例的另一目的在于提供一種內存管理系統(tǒng),所述系統(tǒng)包括 預先配置模塊,用于根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括
常用內存鏈表和大內存鏈表; 定位模塊,用于接收用戶的內存申請請求,根據(jù)所述申請的內存大小,定位內存 池; 第一內存讀取模塊,用于當定位到的內存池的常用內存鏈表存在可用內存時,控 制讀取所述內存池的常用內存鏈表的內存分配給申請用戶;以及
4
第二內存讀取模塊,用于當定位到的內存池的常用內存鏈表不存在可用內存時,
控制讀取所述內存池的大內存鏈表的內存分配給申請用戶。 本發(fā)明實施例的另一 目的在于提供一種包括內存管理系統(tǒng)的服務器。 在本發(fā)明實施例中,根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括
常用內存鏈表和大內存鏈表,接收用戶的內存申請請求,根據(jù)申請的內存大小,定位內存
池;當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取內存池的常用內存鏈表
的內存分配給申請用戶;當定位到的內存池的常用內存鏈表不存在可用內存時,控制讀取
內存池的大內存鏈表的內存分配給申請用戶,分配效率高,實現(xiàn)多個內存池對應多個并行
的線程,內存分配并發(fā)性高。
圖1是本發(fā)明第一實施例提供的內存管理方法的實現(xiàn)流程圖;
圖2是本發(fā)明第二實施例提供的內存管理方法的實現(xiàn)流程圖; 圖3是本發(fā)明實施例提供的控制讀取內存池的常用內存鏈表的內存分配給申請 用戶的實現(xiàn)流程圖; 圖4是本發(fā)明實施例提供的內存池的常用內存鏈表的結構示意圖; 圖5是本發(fā)明實施例提供的控制讀取內存池的大內存鏈表的內存分配給申請用
戶的步驟的具體實現(xiàn)流程圖; 圖6是本發(fā)明實施例提供的內存池的大內存鏈表的結構示意圖;
圖7是本發(fā)明實施例提供的內存管理系統(tǒng)的結構框圖;
圖8是本發(fā)明實施例提供的第一內存讀取模塊的結構框圖;
圖9是本發(fā)明實施例提供的第二內存讀取模塊的結構框圖。
具體實施例方式
為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下結合附圖及實施例,對 本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并 不用于限定本發(fā)明。 在本發(fā)明實施例中,根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括 常用內存鏈表和大內存鏈表,接收用戶的內存申請請求,根據(jù)申請的內存大小,定位內存 池;當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取內存池的常用內存鏈表 的內存分配給申請用戶;當定位到的內存池的常用內存鏈表不存在可用內存時,控制讀取 內存池的大內存鏈表的內存分配給申請用戶。 圖1示出了本發(fā)明第一實施例提供的內存管理方法的實現(xiàn)流程,其詳細步驟如下 所述 在步驟S101中,根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括常 用內存鏈表和大內存鏈表。 在本發(fā)明實施例中,為了滿足多線程并發(fā)分配內存,該實施例將預先配置至少兩 個內存池,其中,該內存池剛配置時是空的,并沒有實際的內存,在用戶使用時才分配實際 的內存,預先配置的內存池是虛擬的,不是實際將內存分配為兩個內存池,是預先建立生成一索引數(shù)組,該索引數(shù)組至少包括2個數(shù)據(jù)元素,在內存使用過程中才根據(jù)該索引實際分 配內存。 例如,以8的倍數(shù)為大小生成總共8192個內存池,每個子內存池相互獨立,子內存 池只處理8個區(qū)域的內存分配,即1 8、9 16、17 24、... 、65529 65536,在此每一 段數(shù)據(jù)都對應到一個內存池,上述8192個子內存池實際上是一個數(shù)組,該數(shù)組包括8192個 元素,此處僅為本發(fā)明的一個具體實施例,在此不用以限制本發(fā)明。 在步驟S102中,接收用戶的內存申請請求,根據(jù)申請的內存大小,定位內存池。
在本發(fā)明實施例中,當有內存申請請求時,根據(jù)該申請內存的大小,確定其對應的 內存池,例如,申請內存的大小為3458,則根據(jù)倍數(shù)的大小8進行計算,3458/8 = 432還余 2,則該申請內存對應的內存池為第433個內存池,在此僅為本發(fā)明的一個實施例,不用以 限制本發(fā)明。 在步驟S103中,當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取所 述內存池的常用內存鏈表的內存分配給申請用戶。 在本發(fā)明實施例中,當與用戶申請的內存大小相對應的的內存池的常用內存鏈表 的第一鏈表頭為空,若不為空則控制讀取所述內存池的常用內存鏈表的內存分配給申請用 戶,同時,修改所述常用內存鏈表的從第二鏈表頭開始的鏈表頭的序號。
在本發(fā)明實施例中,當分配內存時,還需要控制鎖住和解開自旋鎖的操作,在此不 再贅述,下有詳細描述,在此不用以限制本發(fā)明。 在步驟S104中,當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取內 存池的大內存鏈表的內存分配給申請用戶。 在本發(fā)明實施例中,若大內存鏈表的正使用大內存中有剩余的內存塊,則更改所 述大內存鏈表的正使用大內存的偏移量,同時,控制讀取所述內存池的大內存鏈表的剩余 的內存塊分配給申請用戶,否則向操作系統(tǒng)申請一內存塊,然后執(zhí)行更改偏移量和控制讀 取內存的步驟,在該實施例中,當分配內存時,還需要控制鎖住和解開自旋鎖的操作,在此 不再贅述,下有詳細描述,在此不用以限制本發(fā)明。 圖2示出了本發(fā)明第二實施例提供的內存管理方法的實現(xiàn)流程,其詳細步驟如下 所述 在步驟S201中,根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括常 用內存鏈表和大內存鏈表。 在步驟S202中,接收用戶的內存申請請求,判斷該申請的內存大小是否合法,是 則執(zhí)行步驟S203,否則返回錯誤。 在本發(fā)明實施例中,當該內存大小超過預設的大小時,該內存申請不合法,則直接
向操作系統(tǒng)申請內存,其中,該內存合法的判斷依據(jù)是該申請內存是否大于O。 在步驟S203中,判斷申請的內存大小是否超過預先設置的內存管理大小閾值,是
則執(zhí)行步驟S204,否則執(zhí)行步驟S209。 在本發(fā)明實施例中,當內存大小合法后,對內存大小進行檢測,即判斷內存大小是 否超過預先設置的內存管理內大小閾值,即判斷申請的內存大小是否大于上述65536,是則
需要向操作系統(tǒng)申請內存,在此僅為本發(fā)明的一個具體實施例,不用以限制本發(fā)明。
在步驟S204中,根據(jù)申請的內存大小,定位內存池。
在步驟S205中,判斷定位到的內存池的常用內存鏈表是否存在可用內存,是則執(zhí) 行步驟步驟S206,否則執(zhí)行步驟S207。 在步驟S206中,當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取所 述內存池的常用內存鏈表的內存分配給申請用戶。 在本發(fā)明實施例中,當分配內存時,還需要控制鎖住和解開自旋鎖的操作,在此不 再贅述,下有詳細描述,在此不用以限制本發(fā)明。 在步驟S207中,判斷定位到的內存池的大內存鏈表是否存在可用內存,是則執(zhí)行 步驟S208 ;否則執(zhí)行步驟S209。 在步驟S208中,當定位到的內存池的大內存鏈表存在可用內存時,控制讀取所述 內存池的大內存鏈表的內存分配給申請用戶。 在本發(fā)明實施例中,當分配內存時,還需要控制鎖住和解開自旋鎖的操作,在此不 再贅述,下有詳細描述,在此不用以限制本發(fā)明。
在步驟S209中,向操作系統(tǒng)申請一內存塊。 在本發(fā)明實施例中,當用戶申請的內存超過預先設置的內存管理閾值時,則操作 系統(tǒng)單獨分配內存給該申請用戶。 在本發(fā)明實施例中,當定位到的內存池的常用內存鏈表不存在可用內存時,向操 作系統(tǒng)申請一內存塊,存放到內存池常用內存鏈表的正在使用內存的表頭上,改變偏移量, 讀取該內存塊,同時解開自旋鎖。 圖3示出了本發(fā)明實施例提供的控制讀取所述內存池的常用內存鏈表的內存分 配給申請用戶的實現(xiàn)流程,其詳細步驟如下所述 在步驟S301中,控制進入內存池的常用內存鏈表,鎖住常用內存鏈表的自旋鎖。
在本發(fā)明實施例中,該常用內存鏈表的自旋鎖主要用于保護該常用內存鏈表的數(shù) 據(jù)同步。 在步驟S302中,判斷所述常用內存鏈表的第一鏈表頭是否存在可用內存,是則執(zhí) 行步驟S303,否則執(zhí)行步驟S306。 在本發(fā)明實施例中,判斷常用內存鏈表的第一鏈表頭是否存在可用內存的依據(jù)是 判斷該常用內存鏈表的鏈表頭是否為空,為空則表示該常用內存池已經(jīng)無內存可用,不為 空則表示該常用內存池有可用內存,其中,內存池的常用內存鏈表的結構示意圖,如圖4所 示,在此僅為本發(fā)明的一個實施例,不用以限制本發(fā)明。 在步驟S303中,控制讀取所述內存池的常用內存鏈表的內存分配給申請用戶。
在本發(fā)明實施例中,該操作是將常用內存鏈表第一鏈表頭的內存分配給申請用戶 使用。 在步驟S304中,修改常用內存鏈表的從第二鏈表頭開始的鏈表頭的序號。
在本發(fā)明實施例中,當將常用內存鏈表的第一鏈表頭對應的內存分配給用戶后, 該常用內存鏈表的從第二鏈表頭開始的鏈表頭序號自動修改,依次為第一鏈表頭,第二鏈 表頭,....,如果在該常用內存鏈表中,就剩余第一鏈表頭的內存可以使用,則可以不用執(zhí) 行該操作,在此僅為本發(fā)明的一個實施例,不用以限制本發(fā)明。
在步驟S305中,控制解開自旋鎖。 在本發(fā)明實施例中,在常用內存鏈表中,內存分配完畢之后,將鎖住的自旋鎖解鎖,以便其他用戶繼續(xù)使用該常用內存鏈表的內存。 在步驟S306中,解開常用內存鏈表的自旋鎖,控制進入大內存鏈表,進行內存的 分配。 在本發(fā)明實施例中,對于大內存鏈表的內存分配機制如下實施例所述。 圖5示出了本發(fā)明實施例提供的控制讀取內存池的大內存鏈表的內存分配給申
請用戶的步驟的具體實現(xiàn)流程,其具體為 在步驟S501中,控制進入內存池的大內存鏈表,鎖住大內存鏈表的自旋鎖。
在本發(fā)明實施例中,大內存鏈表的自旋鎖主要用于保護數(shù)據(jù)同步以及內存偏移量 值的改變,如圖6所示,大內存鏈表包括自旋鎖、正使用大內存的偏移量和正是用大內存。
在步驟S502中,判斷大內存鏈表的正使用大內存中是否有剩余的內存塊,是則執(zhí) 行步驟S503,否則執(zhí)行步驟S504。 在本發(fā)明實施例中,判斷大內存鏈表的正使用大內存中是否有剩余的內存塊的依 據(jù)是檢測大內存鏈表的正在使用大內存的偏移量,當正使用大內存的偏移量大于等于內存 的大小時,表示正使用大內存中沒有內存塊可用。 假設該大內存鏈表的大小為4096,則當正在使用大內存的偏移量為0時,表示該 大內存鏈表沒用使用過;當正在使用大內存的偏移量為4096時,表示該大內存鏈表已經(jīng)沒 用內存可使用。 在步驟S503中,更改大內存鏈表的正使用大內存的偏移量,同時,控制讀取內存 池的大內存鏈表的剩余的內存塊分配給申請用戶。 在本發(fā)明實施例,當大內存鏈表中存在可用的內存塊時,在分配給用戶內存塊時, 需要更改該大內存鏈表的正使用大內存的偏移量值,以便后來用戶申請內存時,查看是否 有可用內存,在此不用以限制本發(fā)明。 在步驟S504中,向操作系統(tǒng)申請一內存塊,然后執(zhí)行步驟S503。 在本發(fā)明實施例中,當大內存鏈表中,沒用可用內存塊時,向操作系統(tǒng)申請一塊內
存塊,將該申請的內存塊放在該大內存鏈表的表頭,供分配給用戶使用,其中,該申請的內
存塊的大小大于用戶申請的內存大小即可,在此不用以限制本發(fā)明。 在步驟S505中,控制解開自旋鎖。 在本發(fā)明實施例中,在大內存鏈表中,當內存分配完畢之后,將鎖住的自旋鎖解 鎖,以便其他用戶繼續(xù)使用該大內存鏈表的內存。 上述流程為本發(fā)明實施例提供的內存分配機制,當內存分配使用完畢之后,需要 釋放內存,圖6示出了本發(fā)明實施例提供的內存釋放方法的實現(xiàn)流程,其具體步驟如下所 述 在步驟S601中,根據(jù)所述申請的內存大小,定位內存池。 在本發(fā)明實施例中,當內存大小不合法時,直接將該內存釋放給操作系統(tǒng),在此不 再贅述,但不用以限制本發(fā)明。 在步驟S602中,進入定位到的內存池的鏈表,鎖住該鏈表的自旋鎖。
在步驟S603中,將需要釋放的內存放到該鏈表的頭部。
在步驟S604中,解開自旋鎖。 在該實施例中,上述鏈表可以是常用內存鏈表,也可以是大內存鏈表,在此不用以
8限制本發(fā)明。 圖7示出了本發(fā)明實施例提供的內存管理系統(tǒng)的結構框圖,為了便于說明,圖中 僅給出了與本發(fā)明實施例相關的部分,其中,內存管理系統(tǒng)可以內置于服務器的軟件單元、 硬件單元或軟硬件結合單元。 預先配置模塊11根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括常 用內存鏈表和大內存鏈表;定位模塊12接收用戶的內存申請請求,根據(jù)所述申請的內存大 小,定位內存池;當定位到的內存池的常用內存鏈表存在可用內存時,第一內存讀取模塊 13控制讀取所述內存池的常用內存鏈表的內存分配給申請用戶;當定位到的內存池的常 用內存鏈表不存在可用內存時,第二內存讀取模塊14控制讀取所述內存池的大內存鏈表 的內存分配給申請用戶。 在本發(fā)明實施例中,內存釋放控制模塊15將內存釋放在所述內存池的鏈表的頭 部,其中,其具體的實現(xiàn)過程為計算定位需要釋放的內存所在的內存池;鎖住內存池的自 旋鎖,將內存釋放在所述內存池的鏈表的頭部;控制解開所述自旋鎖,在此不用以限制本發(fā)明。 作為本發(fā)明的一個實施例,如圖8所示,第一自旋鎖鎖住模塊131控制進入所述內 存池的常用內存鏈表,鎖住所述常用內存鏈表的自旋鎖;第一判斷模塊132判斷所述常用 內存鏈表的第一鏈表頭是否存在可用內存;當所述第一判斷模塊132判斷所述常用內存鏈 表的第一鏈表頭存在可用內存,第一讀取控制操作模塊133控制讀取所述內存池的常用內 存鏈表的內存分配給申請用戶,同時,修改所述常用內存鏈表的從第二鏈表頭開始的鏈表 頭的序號;第一解鎖控制模塊134控制解開所述自旋鎖。 作為本發(fā)明的另一個實施例,如圖9所示,第二自旋鎖鎖住模塊141控制進入所述 內存池的大內存鏈表,鎖住所述大內存鏈表的自旋鎖;第二判斷模塊142判斷所述大內存 鏈表的正使用大內存中是否有剩余的內存塊;當所述第二判斷模塊142判斷所述大內存鏈 表的正使用大內存中有剩余的內存塊,第二讀取控制操作模塊143更改所述大內存鏈表的 正使用大內存的偏移量,同時,控制讀取所述內存池的大內存鏈表的剩余的內存塊分配給 申請用戶;當所述第二判斷模塊142判斷所述大內存鏈表的正使用大內存中沒有剩余的內 存塊,內存塊申請模塊144向操作系統(tǒng)申請一內存塊;第二解鎖控制模塊145控制解開所述 自旋鎖。 在本發(fā)明實施例中,根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括 常用內存鏈表和大內存鏈表,接收用戶的內存申請請求,根據(jù)申請的內存大小,定位內存 池;當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取內存池的常用內存鏈表 的內存分配給申請用戶;當定位到的內存池的常用內存鏈表不存在可用內存時,控制讀取 內存池的大內存鏈表的內存分配給申請用戶,分配效率高,實現(xiàn)多個內存池對應多個并行 的線程,內存分配并發(fā)性高,而且減少了線程切換所耗費的資源。 以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發(fā)明的保護范圍之內。
權利要求
一種內存管理方法,其特征在于,所述方法包括下述步驟根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括常用內存鏈表和大內存鏈表;接收用戶的內存申請請求,根據(jù)所述申請的內存大小,定位內存池;當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取所述內存池的常用內存鏈表的內存分配給申請用戶;當定位到的內存池的常用內存鏈表不存在可用內存時,控制讀取所述內存池的大內存鏈表的內存分配給申請用戶。
2. 如權利要求l所述的方法,其特征在于,所述當定位到的內存池的常用內存鏈表存 在可用內存時,控制讀取所述內存池的常用內存鏈表的內存分配給申請用戶的步驟具體包 括下述步驟控制進入所述內存池的常用內存鏈表,鎖住所述常用內存鏈表的自旋鎖; 判斷所述常用內存鏈表的第一鏈表頭是否存在可用內存;若是,則控制讀取所述內存池的常用內存鏈表的內存分配給申請用戶,同時,修改所述 常用內存鏈表的從第二鏈表頭開始的鏈表頭的序號; 控制解開所述自旋鎖。
3. 如權利要求l所述的方法,其特征在于,所述當定位到的內存池的常用內存鏈表不 存在可用內存時,控制讀取所述內存池的大內存鏈表的內存分配給申請用戶的步驟具體包 括下述步驟控制進入所述內存池的大內存鏈表,鎖住所述大內存鏈表的自旋鎖; 判斷所述大內存鏈表的正使用大內存中是否有剩余的內存塊;若是,則更改所述大內存鏈表的正使用大內存的偏移量,同時,控制讀取所述內存池的 大內存鏈表的剩余的內存塊分配給申請用戶;若否,則向操作系統(tǒng)申請一內存塊,并執(zhí)行更改偏移量和控制讀取內存的步驟; 控制解開所述自旋鎖。
4. 如權利要求1所述的方法,其特征在于,所述當定位到的內存池的常用內存鏈表不 存在可用內存時,控制讀取所述內存池的大內存鏈表的內存分配給申請用戶的步驟之后還 包括下述步驟計算定位需要釋放的內存所在的內存池;鎖住內存池的自旋鎖,將內存釋放在所述內存池的鏈表的頭部; 控制解開所述自旋鎖。
5. —種內存管理系統(tǒng),其特征在于,所述系統(tǒng)包括預先配置模塊,用于根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括常用 內存鏈表和大內存鏈表;定位模塊,用于接收用戶的內存申請請求,根據(jù)所述申請的內存大小,定位內存池;第一內存讀取模塊,用于當定位到的內存池的常用內存鏈表存在可用內存時,控制讀 取所述內存池的常用內存鏈表的內存分配給申請用戶;以及第二內存讀取模塊,用于當定位到的內存池的常用內存鏈表不存在可用內存時,控制 讀取所述內存池的大內存鏈表的內存分配給申請用戶。
6. 如權利要求5所述的系統(tǒng),其特征在于,所述第一內存讀取模塊具體包括第一 自旋鎖鎖住模塊,用于控制進入所述內存池的常用內存鏈表,鎖住所述常用內存 鏈表的自旋鎖;第一判斷模塊,用于判斷所述常用內存鏈表的第一鏈表頭是否存在可用內存; 第一讀取控制操作模塊,用于當所述第一判斷模塊判斷所述常用內存鏈表的第一鏈表頭存在可用內存,則控制讀取所述內存池的常用內存鏈表的內存分配給申請用戶,同時,修改所述常用內存鏈表的從第二鏈表頭開始的鏈表頭的序號;以及 第一解鎖控制模塊,用于控制解開所述自旋鎖。
7. 如權利要求5所述的系統(tǒng),其特征在于,所述第二內存讀取模塊具體包括 第二自旋鎖鎖住模塊,用于控制進入所述內存池的大內存鏈表,鎖住所述大內存鏈表的自旋鎖;第二判斷模塊,用于判斷所述大內存鏈表的正使用大內存中是否有剩余的內存塊;第二讀取控制操作模塊,用于當所述第二判斷模塊判斷所述大內存鏈表的正使用大內 存中有剩余的內存塊,則更改所述大內存鏈表的正使用大內存的偏移量,同時,控制讀取所 述內存池的大內存鏈表的剩余的內存塊分配給申請用戶;內存塊申請模塊,用于當所述第二判斷模塊判斷所述大內存鏈表的正使用大內存中沒 有剩余的內存塊,則向操作系統(tǒng)申請一內存塊;以及第二解鎖控制模塊,用于控制解開所述自旋鎖。
8. 如權利要求5所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括內存釋放控制模塊,用于將內存釋放在所述內存池的鏈表的頭部。
9. 一種包括權利要求5至8任一項的內存管理系統(tǒng)的服務器。
全文摘要
本發(fā)明適用于服務器技術領域,提供了一種內存管理方法、系統(tǒng)及服務器,所述方法包括下述步驟根據(jù)內存的大小,預先配置至少兩個內存池,所述內存池包括常用內存鏈表和大內存鏈表;接收用戶的內存申請請求,根據(jù)所述申請的內存大小,定位內存池;當定位到的內存池的常用內存鏈表存在可用內存時,控制讀取所述內存池的常用內存鏈表的內存分配給申請用戶;當定位到的內存池的常用內存鏈表不存在可用內存時,控制讀取所述內存池的大內存鏈表的內存分配給申請用戶,分配效率高,實現(xiàn)多個內存池對應多個并行的線程,內存分配并發(fā)性高。
文檔編號G06F9/50GK101702138SQ20091011042
公開日2010年5月5日 申請日期2009年10月30日 優(yōu)先權日2009年10月30日
發(fā)明者王燊望 申請人:深圳市新飛揚數(shù)碼技術有限公司