[發明專利]一種動態對象緩存池分配方法有效
| 申請號: | 201910375374.4 | 申請日: | 2019-05-07 |
| 公開(公告)號: | CN110109677B | 公開(公告)日: | 2023-08-29 |
| 發明(設計)人: | 王磊 | 申請(專利權)人: | 北京善訊互動科技有限公司 |
| 主分類號: | G06F8/41 | 分類號: | G06F8/41;G06F9/50 |
| 代理公司: | 北京中企鴻陽知識產權代理事務所(普通合伙) 11487 | 代理人: | 李斌 |
| 地址: | 100190 北京市海淀*** | 國省代碼: | 北京;11 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 動態 對象 緩存 分配 方法 | ||
本發明提出了一種動態對象緩存池分配方法,包括:采用基于對象回收機制的動態緩存池,包括如下步驟:步驟S1,配置動態緩存池,所述動態緩存池包括多個數組單元,通過雙向鏈表將多個數組單元串聯起,形成固定分配空間,其中,每個所述數組單元對應一個內存緩存塊;步驟S2,在使用時,將閑置雙向隊列的待處理對象通過指針放入使用中雙向隊列,以將該待處理對象設置為使用中狀態;步驟S3,當所述動態緩存池的空間不足時,采用指針指向新分配的數組空間,并通過雙向鏈表將該數組空間與現有的空閑數組空間串聯,形成固定分配空間。本發明很大程度上降低了內存顯存的占用量,徹底解決頻繁分配內存導致的內存碎片。
技術領域
本發明涉及軟件技術領域,特別涉及一種動態對象緩存池分配方法。
背景技術
當前該技術領域內,在軟件研發過程中,存在以下問題:
1.大量頻繁的分配與釋放內存,對大量游戲數據頻繁操作加載的情況,容易產生較大的CPU消耗,手機游戲電量消耗,系統內存碎片逐漸增多,內存整理負擔等直接影響,游戲的處理吞吐量及游戲品質也相應的受到影響。
2.長時間運行游戲后,因為大量內存碎片的存在,游戲開始運行緩慢,退出游戲時手機也出現一段時間的卡頓。如果是c/c++類游戲服務器,就會出現一段時間需要重新啟動服務器維護的情況出現。C#等高級語言也會出現GC過高的問題。
4.大型游戲,很多低端手機一開始就會遇見內存崩潰的情況也時有發生,市面上的很多內存池,主要保留的內存緩存的特點,并沒有完全解決實現O1復雜度的直接存取刪除的高性能數據結構特點。
5.很多內存池的數據單元擴充,需要拷貝原空間內容,整體拷貝分配到新的內存單元,這簡直是可怕的,針對大量的內存拷貝,不僅這種拷貝需要較長時間,CPU占用高,且非常不安全,很容易出現可能的卡頓,特別是海量的數據的情況,會出現無法再分配更大空間的內存,直接導致系統崩潰。
發明內容
本發明的目的旨在至少解決所述技術缺陷之一。
為此,本發明的目的在于提出一種動態對象緩存池分配方法,可以實現很大程度上降低了內存顯存的占用量,徹底解決頻繁分配內存導致的內存碎片。
為了實現上述目的,本發明的實施例提供一種動態對象緩存池分配方法,采用基于對象回收機制的動態緩存池,包括如下步驟:
步驟S1,配置動態緩存池,所述動態緩存池包括多個數組單元,通過雙向鏈表將多個數組單元串聯起,形成固定分配空間,其中,每個所述數組單元對應一個內存緩存塊;
步驟S2,在使用時,將閑置雙向隊列的待處理對象通過指針放入使用中雙向隊列,以將該待處理對象設置為使用中狀態。
在本步驟中,向所述動態緩存池分配第一至第四指針,其中,第一指針為閑置雙向鏈表的頭部指針,第二指針為閑置雙向鏈表的尾部指針;第三指針為使用中雙向鏈表的頭部指針,第四指針為使用中雙向鏈表的尾部指著。
在使用時,由所述第一指針和第二指針將待處理對象取出,并放入至所述第三指針和第四指針指向的使用中雙向隊列,將該待處理對象設置為使用中狀態。
當使用完畢時,遍歷當前正在使用的對象,將需要刪除的對象由所述第三指針和第四指針將待處理對象取出,并放入至所述第一指針和第二指針指向的閑置雙向隊列,將該待處理對象設置為閑置狀態。
步驟S3,當所述動態緩存池的空間不足時,采用指針指向新分配的數組空間,并通過雙向鏈表將該數組空間與現有的空閑數組空間串聯,形成固定分配空間。
在本步驟中,分配新的數組空間,將第一指針和第二指針指向新分配的數組空間,通過雙向鏈表將該數組空間與現有的空閑數組空間串聯,形成固定分配空間。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京善訊互動科技有限公司,未經北京善訊互動科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201910375374.4/2.html,轉載請聲明來源鉆瓜專利網。





