[發明專利]一種共享內存分配方法在審
| 申請號: | 201310376038.4 | 申請日: | 2013-08-26 |
| 公開(公告)號: | CN103440203A | 公開(公告)日: | 2013-12-11 |
| 發明(設計)人: | 李小慶 | 申請(專利權)人: | 上海斐訊數據通信技術有限公司 |
| 主分類號: | G06F12/02 | 分類號: | G06F12/02;G06F17/30 |
| 代理公司: | 暫無信息 | 代理人: | 暫無信息 |
| 地址: | 201616 上海市松江*** | 國省代碼: | 上海;31 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 共享 內存 分配 方法 | ||
技術領域
本發明涉及共享內存技術領域,特別是涉及一種共享內存的分配方法。
背景技術
當前的共享內存分配器主要用于有親屬關系的進程之間。具體操作為,父進程創建共享內存,在共享內存中進行動態分配,所有的數據達到完整狀態后,通過fork創建子進程。
由于子進程復制了父進程的地址空間,所以在父進程中設置好的數據結構對其是可見的,從而達到共享數據結構的目的。當前方案有弊端,首先,只能在有親屬關系的進程之間使用,其次,共享內存的數據結構設置好后就無法修改,因為進程的地址空間是獨立的,在任何進程中做的修改都不可能被其他進程看見。嚴格來說,這個方案只是節約了內存,并非真正的動態內存分配。
本發明對進程間的關系沒有要求,內存的分配在任何時候都可以進行,共享內存的所有進程都可以看到別的進程的修改。
發明內容
基于此,有必要提供任何時候都可以進行內存分配的共享內存分配方法。
一種共享內存分配方法,包括:
步驟1:將分配的共享內存等分成小的內存塊,所有內存塊的使用情況用一個比特表記錄;
步驟2:根據申請使用的內存大小計算出連續內存塊的塊數S;
步驟3:遍歷所述比特表,選擇塊數大于等于S且是其中最小的一個連續塊。
進一步的,所述所有內存塊的使用情況用一個比特表記錄具體為:
比特表中的每一個比特代表一個塊,0表示對應內存塊沒有被占用,1表示對應內存塊已經被占用。
進一步的,所述內存塊為16字節。
進一步的,所述連續塊的起始塊分為用于存放連續塊的塊數S的頭部與用于存放數據的數據部,連續塊的其他塊全部用于存放數據。
進一步的,當要存放的數據為指針時,當要存放的數據為指針時,全部改為指針所指地址與共享內存起始地址的偏移量。
進一步的,還包括內存釋放步驟,根據連續塊的起始塊的頭部中的塊數S從連續塊起始位置釋放連續S塊內存塊。
進一步的,在比特表中把已經釋放的內存塊標記。
采用本發明的方法后,采用本發明的方法后,通過查看比特表方便了解共享內存的內存塊占用情況,隨時為進程需要分配共享內存。內存塊數據部分的指針使用指針所指地址與共享內存起始地址的偏移量代替,使各個進程的讀寫彼此看得見,實現共享內存的動態分配。
附圖說明
圖1為本發明提供的共享內存分配方法的的流程圖;
圖2為本發明所述的比特表的示意圖;
圖3為本發明所述的連續塊的示意圖;
圖4為本發明所述的共享內存在進程間的地址空間映射圖。
具體實施方式
為了使本發明的目的、技術方案及優點更清楚明白,以下結合附圖及實施例,對本發明進一步詳細說明。應當理解,此處所描述的具體實施例僅用以解釋本發明,并不用于限定本發明。
參閱圖1,本發明提供的一個實施例的共享內存分配方法,包括:
步驟S100,將分配的共享內存等分成小的內存塊,所有內存塊的使用情況用一個比特表記錄;
將分配的共享內存等分成小的內存塊,例如分為16字節的內存塊。所有內存塊的使用情況用一個比特表記錄。
在優選實施方式中,如圖2所示,比特表中的每一個比特代表一個塊,0表示對應內存塊沒有被占用,1表示對應內存塊已經被占用。
步驟S200,根據申請使用的內存大小計算出連續內存塊的塊數S;
如圖3所示,連續內存塊的起始塊分為用于存放連續塊的塊數S的頭部head與用于存放數據的數據部data,連續塊的其他塊全部用于存放數據data。在計算連續塊的塊數S時,需把連續塊的起始塊的頭部head計算在內,即:如果現在需要分配一個大小為M的共享內存,則用“(M+所述頭部head所占大小)/內存塊的大小”去計算實際需要申請的連續塊的塊數S。
步驟S300,遍歷所述比特表,選擇塊數大于等于S且是其中最小的一個連續塊;
結合圖2,假如需要一個塊數為2的連續塊,共享內存如圖2中的比特表所示。首先,遍歷整個比特表,把塊數大于等于2的聯系找出來,圖2中符合這個條件的連續塊有3個,塊數分別為2、4、3,選擇其中最小的一個連續塊,即塊數為2的連續塊,提高共享內存的利用率。當然,如果遍歷整個比特表,假如出現塊數為2的連續塊有兩個,則選擇在比特表中靠前的連續塊,當然也可以選擇靠后的。其他情況在此就不再贅述,以此類推。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于上海斐訊數據通信技術有限公司,未經上海斐訊數據通信技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201310376038.4/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種實現光鏈路可靠通信的方法
- 下一篇:連續作業箱式吸塵粉碎機





