本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種共享內(nèi)存空間的管理方法。
背景技術(shù):
進(jìn)程是計(jì)算機(jī)進(jìn)行資源分配和調(diào)度的基本單位,進(jìn)程是一個(gè)實(shí)體。共享內(nèi)存(sharedmemory,shm)是被多個(gè)進(jìn)程共享的邏輯內(nèi)存區(qū)域。每個(gè)進(jìn)程將共享內(nèi)存空間地址映射到各自的邏輯地址空間中,一個(gè)進(jìn)程向共享內(nèi)存空間寫入了數(shù)據(jù),使用共享內(nèi)存空間的其他進(jìn)程就可以看到該數(shù)據(jù),從而實(shí)現(xiàn)進(jìn)程間通信(interprocesscommunication,ipc)。由于進(jìn)程可以直接讀寫內(nèi)存,不需要復(fù)制數(shù)據(jù),因此使用共享內(nèi)存空間通信是進(jìn)程間通信(interprocesscommunication,ipc)最有效的方式;此外,共享內(nèi)存空間還可以緩存大數(shù)據(jù)。
由于共享內(nèi)存空間在各進(jìn)程的地址空間中的地址不同,因此,共享內(nèi)存空間中只能存放數(shù)據(jù),不能存放指針。在共享內(nèi)存空間中使用相對共享內(nèi)存空間首地址的地址偏移量來模擬指針。
共享內(nèi)存空間的使用有如下幾個(gè)特點(diǎn):可以被多個(gè)進(jìn)程打開訪問;讀寫操作的進(jìn)程在執(zhí)行讀寫操作時(shí)其他進(jìn)程不能進(jìn)行讀寫操作;多個(gè)進(jìn)程可以交替對共享內(nèi)存空間執(zhí)行寫操作;一個(gè)進(jìn)程執(zhí)行了共享內(nèi)存空間的寫操作后,不影響其他進(jìn)程對該共享內(nèi)存空間的訪問,同時(shí)其他進(jìn)程對更新后的內(nèi)存具有可見性。共享內(nèi)存空間的使用需要通過信號量、全局鎖通過、管道消息或ipc消息等來保證讀寫之間的同步。
傳統(tǒng)的共享內(nèi)存空間的管理方法只是單純停留在地址偏移量的 移動(dòng),來存儲和讀取數(shù)據(jù),不僅使用上不靈活,多次讀寫后,地址偏移量的大小不好控制,因此很難發(fā)揮共享內(nèi)存空間的作用。
技術(shù)實(shí)現(xiàn)要素:
針對現(xiàn)有技術(shù)的缺陷,本發(fā)明提供一種共享內(nèi)存空間的管理方法及系統(tǒng),以解決現(xiàn)有共享內(nèi)存空間管理技術(shù)單純停留在偏移量的移動(dòng)來存儲和讀取數(shù)據(jù),不僅使用上不靈活,多次讀寫后,偏移量的大小不好控制,很難發(fā)揮共享內(nèi)存空間的作用的技術(shù)問題。
為此目的,本發(fā)明提出一種共享內(nèi)存空間的管理方法,包括:
基于預(yù)設(shè)的鏈表模式,將待管理的共享內(nèi)存空間初始化為公共區(qū)和私有區(qū),且在所述私有區(qū)中初始化一塊屬性區(qū),并將所述鏈表模式對應(yīng)的鏈表結(jié)點(diǎn)的屬性存放到所述屬性區(qū);
在接收到一條待寫入的數(shù)據(jù)時(shí),從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)鏈表結(jié)點(diǎn);
將該條數(shù)據(jù)寫入到該鏈表結(jié)點(diǎn)的數(shù)據(jù)域,并在該鏈表結(jié)點(diǎn)的指針域記錄與該鏈表結(jié)點(diǎn)相關(guān)的鏈表結(jié)點(diǎn)相對所述共享內(nèi)存空間的首地址的地址偏移量。
可選的,所述鏈表模式為容器vector;
相應(yīng)地,所述將所述鏈表模式對應(yīng)的鏈表結(jié)點(diǎn)屬性存放到所述屬性區(qū),包括:
將鏈表結(jié)點(diǎn)的數(shù)據(jù)域預(yù)設(shè)的數(shù)據(jù)條數(shù)、每條數(shù)據(jù)預(yù)設(shè)的最大長度、第一個(gè)鏈表結(jié)點(diǎn)的指針域相對于共享內(nèi)存空間的首地址的地址偏移量以及當(dāng)前使用的鏈表結(jié)點(diǎn)的指針域相對于共享內(nèi)存空間的首地址的地址偏移量存放到所述屬性區(qū)。
可選的,所述從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)鏈表結(jié)點(diǎn)空間,包括:
從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)數(shù)據(jù)域大小為預(yù)設(shè)頁大小的鏈表結(jié)點(diǎn)空間,所述預(yù)設(shè)頁大小由所述鏈表結(jié)點(diǎn)的數(shù)據(jù)域 預(yù)設(shè)的數(shù)據(jù)條數(shù)以及每條數(shù)據(jù)預(yù)設(shè)的最大長度確定。
可選的,所述在該鏈表結(jié)點(diǎn)的指針域記錄與該鏈表結(jié)點(diǎn)相關(guān)的鏈表結(jié)點(diǎn)相對所述共享內(nèi)存空間的首地址的地址偏移量,包括:
在該鏈表結(jié)點(diǎn)的指針域記錄該鏈表結(jié)點(diǎn)的數(shù)據(jù)域相對所述共享內(nèi)存空間的首地址的地址偏移量、前一鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量以及后一鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量。
可選的,所述從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)鏈表結(jié)點(diǎn)空間之前,所述共享內(nèi)存空間管理方法還包括:
判斷當(dāng)前使用的鏈表結(jié)點(diǎn)的數(shù)據(jù)域?qū)懭氲臄?shù)據(jù)條數(shù)是否達(dá)到預(yù)設(shè)的數(shù)據(jù)條數(shù);
若是,則執(zhí)行所述從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)鏈表結(jié)點(diǎn)空間的步驟;
相應(yīng)地,所述將該條數(shù)據(jù)寫入到該鏈表結(jié)點(diǎn)的數(shù)據(jù)域,包括:
將該條數(shù)據(jù)寫入到該鏈表結(jié)點(diǎn)的數(shù)據(jù)域的第一條數(shù)據(jù)中。
可選的,所述從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)鏈表結(jié)點(diǎn)空間之后,所述共享內(nèi)存空間的管理方法還包括:
將申請的鏈表結(jié)點(diǎn)空間的數(shù)據(jù)域相對于共享內(nèi)存空間的首地址的地址偏移量存放到預(yù)先創(chuàng)建的棧空間中。
可選的,所述鏈表模式為表list;
相應(yīng)地,所述在所述私有區(qū)中初始化一塊屬性區(qū),包括:
在所述私有區(qū)中初始化一塊具有n個(gè)歸類標(biāo)識slot空間的屬性區(qū),所述n為slot的預(yù)設(shè)個(gè)數(shù),所述slot空間用于存放該slot當(dāng)前使用的鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量;
相應(yīng)地,所述將所述鏈表模式對應(yīng)的鏈表結(jié)點(diǎn)屬性存放到所述屬性區(qū),包括:
將第一個(gè)鏈表結(jié)點(diǎn)的數(shù)據(jù)域相對所述共享內(nèi)存空間的首地址的 地址偏移量、最后一個(gè)鏈表結(jié)點(diǎn)的數(shù)據(jù)域相對所述共享內(nèi)存空間的首地址的地址偏移量存放到所述屬性區(qū)的非slot空間中。
可選的,所述從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)鏈表結(jié)點(diǎn)空間,包括:
從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)數(shù)據(jù)域長度為該條數(shù)據(jù)長度的鏈表結(jié)點(diǎn)空間。
可選的,所述將該條數(shù)據(jù)寫入到該鏈表結(jié)點(diǎn)的數(shù)據(jù)域之前,所述共享內(nèi)存空間的管理方法還包括:
基于預(yù)設(shè)的哈希規(guī)則哈希該條數(shù)據(jù),得到該條數(shù)據(jù)的哈希值;
基于各slot預(yù)設(shè)的哈希值范圍,確定該條數(shù)據(jù)的哈希值所屬的目標(biāo)哈希值范圍,得到目標(biāo)slot空間;
將該鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量存放到所述目標(biāo)slot空間中。
可選的,所述在該鏈表結(jié)點(diǎn)的指針域記錄與該鏈表結(jié)點(diǎn)相關(guān)的鏈表結(jié)點(diǎn)相對所述共享內(nèi)存空間的首地址的地址偏移量,包括:
在該鏈表結(jié)點(diǎn)的指針域記錄該鏈表結(jié)點(diǎn)的數(shù)據(jù)域相對所述共享內(nèi)存空間的首地址的地址偏移量、與該鏈表結(jié)點(diǎn)同屬一個(gè)slot的前一鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量以及后一鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量。
相比于現(xiàn)有技術(shù),本發(fā)明的共享內(nèi)存空間的管理方法,利用鏈表結(jié)點(diǎn)的指針域記錄相對共享內(nèi)存空間首地址的地址偏移量,用以模擬鏈表結(jié)構(gòu),對共享內(nèi)存空間實(shí)現(xiàn)靈活、高效的管理。
附圖說明
圖1為本發(fā)明第一實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖;
圖2為本發(fā)明第二實(shí)施例提供的一種共享內(nèi)存空間的管理方法 流程圖;
圖3為本發(fā)明第三實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖;
圖4為本發(fā)明第四實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖;
圖5為本發(fā)明第五實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖;
圖6為本發(fā)明第六實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖;
圖7為本發(fā)明第七實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖;
圖8為本發(fā)明第八實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖;
圖9為本發(fā)明第九實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖;
圖10為本發(fā)明第十實(shí)施例提供的一種共享內(nèi)存空間的管理方法流程圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。
如圖1所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟101至103:
101、基于預(yù)設(shè)的鏈表模式,將待管理的共享內(nèi)存空間初始化為公共區(qū)和私有區(qū),且在所述私有區(qū)中初始化一塊屬性區(qū),并將所述鏈表模式對應(yīng)的鏈表結(jié)點(diǎn)的屬性存放到所述屬性區(qū)。
本實(shí)施例的管理方法的執(zhí)行主體可以創(chuàng)建所述待管理的共享內(nèi)存空間,當(dāng)然,待管理的共享內(nèi)存空間也可由其他進(jìn)程創(chuàng)建。每創(chuàng)建一個(gè)共享內(nèi)存空間,也即得到一個(gè)共享內(nèi)存空間對象,在創(chuàng)建一個(gè)共享內(nèi)存空間后要為其增加標(biāo)識,也即該共享內(nèi)存空間對象有唯一對象名稱用于標(biāo)識該共享內(nèi)存空間對象。
本實(shí)施例的的管理方法,將待管理的共享內(nèi)存空間初始化為公共區(qū)和私有區(qū)后,可以將待管理的共享內(nèi)存空間的信息存儲到公共區(qū),共享內(nèi)存空間的信息可包括:共享內(nèi)存空間對象名稱及共享內(nèi)存空間的首地址等。
本實(shí)施例的管理方法中,預(yù)設(shè)的鏈表模式可為用戶從多個(gè)預(yù)設(shè)的鏈表模式中任選的一個(gè)鏈表模式,也可為本實(shí)施例的管理方法的執(zhí)行主體預(yù)先配置的鏈表模式。
102、在接收到一條待寫入的數(shù)據(jù)時(shí),從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)鏈表結(jié)點(diǎn)空間。
私有區(qū)的非屬性區(qū)用來存放數(shù)據(jù)及其相關(guān)信息,因此,私有區(qū)的非屬性區(qū)也可稱為數(shù)據(jù)區(qū)。
103、將該條數(shù)據(jù)寫入到該鏈表結(jié)點(diǎn)的數(shù)據(jù)域,并在該鏈表結(jié)點(diǎn)的指針域記錄與該鏈表結(jié)點(diǎn)相關(guān)的鏈表結(jié)點(diǎn)相對所述共享內(nèi)存空間的首地址的地址偏移量。
本實(shí)施例中,步驟103執(zhí)行后,可進(jìn)一步地更新公共區(qū)中存放的信息,例如:共享內(nèi)存空間中已存放的數(shù)據(jù)條數(shù)及共享內(nèi)存空間容量等。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式,鏈表結(jié)點(diǎn)的指針域記錄相對共享內(nèi)存空間首地址的地址偏移量,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
在一個(gè)具體的例子中,可將公共區(qū)進(jìn)一步初始化為共享內(nèi)存空間環(huán)境管理區(qū)和對象管理區(qū)。
具體地,共享內(nèi)存空間環(huán)境管理區(qū)中可存儲的信息可包括:共享內(nèi)存空間環(huán)境管理區(qū)標(biāo)識、共享內(nèi)存空間環(huán)境管理區(qū)版本號、共享內(nèi)存空間環(huán)境管理區(qū)創(chuàng)建日期、共享內(nèi)存空間長度(以字節(jié)計(jì)算)、共享內(nèi)存空間已使用空間(以字節(jié)計(jì)算)、共享內(nèi)存空間環(huán)境鎖、共享內(nèi)存空間對象字典表、共享內(nèi)存空間環(huán)境管理區(qū)占用空間(以字節(jié)計(jì)算)、共享內(nèi)存空間環(huán)境管理區(qū)結(jié)束位置。
對象管理區(qū)中可存儲的信息可包括:共享內(nèi)存空間對象類型定義、對象名稱、對象在內(nèi)存中的偏移位置、對象占用內(nèi)存字節(jié)數(shù)、對象容量、對象中已保存數(shù)據(jù)條數(shù)。
如圖2所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟201至203:
201、基于預(yù)設(shè)的鏈表模式:容器vector,將待管理的共享內(nèi)存空間初始化為公共區(qū)和私有區(qū),且在所述私有區(qū)中初始化一塊屬性區(qū),將鏈表結(jié)點(diǎn)的數(shù)據(jù)域預(yù)設(shè)的數(shù)據(jù)條數(shù)、每條數(shù)據(jù)預(yù)設(shè)的最大長度、第一個(gè)鏈表結(jié)點(diǎn)的指針域相對于共享內(nèi)存空間的首地址的地址偏移量以及當(dāng)前使用的鏈表結(jié)點(diǎn)的指針域相對于共享內(nèi)存空間的首地址的地址偏移量存放到所述屬性區(qū)。
步驟202~203與圖1所示的步驟102~103相同,在此不再贅述。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:容器vector,將共享內(nèi)存空間以頁的方式進(jìn)行管理,即每個(gè)鏈表結(jié)點(diǎn)的數(shù)據(jù)域的大小為頁大小,并在初始化共享內(nèi)存空間時(shí)即確定頁大小,鏈表結(jié)點(diǎn)的指針域可稱為頁信息域,鏈表結(jié)點(diǎn)的數(shù)據(jù)域可稱為頁數(shù)據(jù)域,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
在一個(gè)具體的例子中,步驟201中在所述私有區(qū)中初始化一塊屬性區(qū)的同時(shí)也可申請一個(gè)鏈表結(jié)點(diǎn)空間。步驟201中屬性區(qū)中還保存以下信息:頁數(shù)(即頁數(shù)據(jù)域個(gè)數(shù))。
由于在初始化時(shí)申請了一個(gè)鏈表結(jié)點(diǎn)空間,則頁數(shù)為1,后續(xù)每 申請一個(gè)鏈表結(jié)點(diǎn)空間,則頁數(shù)加1。
如圖3所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟301至303:
步驟301與圖2所示的步驟201相同,在此不再贅述。
302、在接收到一條待寫入的數(shù)據(jù)時(shí),從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)數(shù)據(jù)域大小為預(yù)設(shè)頁大小的鏈表結(jié)點(diǎn)空間,所述預(yù)設(shè)頁大小由所述鏈表結(jié)點(diǎn)的數(shù)據(jù)域預(yù)設(shè)的數(shù)據(jù)條數(shù)以及每條數(shù)據(jù)預(yù)設(shè)的最大長度確定。
步驟303與圖2所示的步驟203相同,在此不再贅述。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:容器vector,在申請鏈表結(jié)點(diǎn)空間時(shí),鏈表結(jié)點(diǎn)的數(shù)據(jù)域的大小是固定的即預(yù)設(shè)的頁大小,以頁的方式對共享內(nèi)存空間進(jìn)行管理,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
如圖4所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟401至404:
步驟401~402與圖2所示的步驟201~202相同,在此不再贅述。
403、將該條數(shù)據(jù)寫入到該鏈表結(jié)點(diǎn)的數(shù)據(jù)域,并在該鏈表結(jié)點(diǎn)的指針域記錄該鏈表結(jié)點(diǎn)的數(shù)據(jù)域相對所述共享內(nèi)存空間的首地址的地址偏移量、前一鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量以及后一鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:容器vector,在將一條數(shù)據(jù)寫入到鏈表結(jié)點(diǎn)的數(shù)據(jù)域后,在該鏈表結(jié)點(diǎn)的指針域記錄與該鏈表結(jié)點(diǎn)相關(guān)的鏈表結(jié)點(diǎn)相對所述共享內(nèi)存空間的首地址的地址偏移量,方便尋找待讀取的數(shù)據(jù),從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
進(jìn)一步地,本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式: 容器vector,鏈表結(jié)點(diǎn)的指針域可稱為頁信息域,鏈表結(jié)點(diǎn)的數(shù)據(jù)域可稱為頁數(shù)據(jù)域,有效的將頁信息域和頁數(shù)據(jù)域解耦,在頁數(shù)據(jù)域增加數(shù)據(jù)更方便,刪除數(shù)據(jù)從末尾開始。
如圖5所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟501至505:
步驟501與圖2所示的步驟201相同,在此不再贅述。
502、在接收到一條待寫入的數(shù)據(jù)時(shí),判斷當(dāng)前使用的鏈表結(jié)點(diǎn)的數(shù)據(jù)域?qū)懭氲臄?shù)據(jù)條數(shù)是否達(dá)到預(yù)設(shè)的數(shù)據(jù)條數(shù);若是,則執(zhí)行步驟503~504;若否,則執(zhí)行步驟505。
503、從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)鏈表結(jié)點(diǎn)空間。
504、將該條數(shù)據(jù)寫入到該鏈表結(jié)點(diǎn)的數(shù)據(jù)域的第一條數(shù)據(jù)中,并在該鏈表結(jié)點(diǎn)的指針域記錄與該鏈表結(jié)點(diǎn)相關(guān)的鏈表結(jié)點(diǎn)相對所述共享內(nèi)存空間的首地址的地址偏移量。
505、將該條數(shù)據(jù)寫入到當(dāng)前使用的鏈表結(jié)點(diǎn)的數(shù)據(jù)域中。
具體地,可將該條數(shù)據(jù)寫入到當(dāng)前使用的鏈表結(jié)點(diǎn)的數(shù)據(jù)域的已寫入數(shù)據(jù)中最末條數(shù)據(jù)之后,例如:鏈表結(jié)點(diǎn)的數(shù)據(jù)域可存放30條數(shù)據(jù),已寫入了15條數(shù)據(jù),則來一條數(shù)據(jù),就寫入到第16條中。若已寫入的15條數(shù)據(jù)中第2條被刪除了,則來一條數(shù)據(jù),也是寫到第16條中,方便管理。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:容器vector,以頁的方式對共享內(nèi)存空間進(jìn)行管理,在接收到一條待寫入的數(shù)據(jù)時(shí),判斷當(dāng)前使用的鏈表結(jié)點(diǎn)的數(shù)據(jù)域(頁)是否用完,若用完則申請新的鏈表結(jié)點(diǎn)空間,若未用完,則繼續(xù)使用,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
如圖6所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟601至604:
步驟601~603與圖2所示的步驟201~203相同,在此不再贅述。
步驟604為圖2所示的步驟202之后新增的步驟:
605、將申請的鏈表結(jié)點(diǎn)空間的數(shù)據(jù)域相對于共享內(nèi)存空間的首地址的地址偏移量存放到預(yù)先創(chuàng)建的??臻g中。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:容器vector,以頁的方式對共享內(nèi)存空間進(jìn)行管理,鏈表結(jié)點(diǎn)的指針域可稱為頁信息域,鏈表結(jié)點(diǎn)的數(shù)據(jù)域可稱為頁數(shù)據(jù)域,由于頁數(shù)據(jù)域分散,本實(shí)施例通過預(yù)先創(chuàng)建的??臻g來管理頁數(shù)據(jù)域,??臻g中每個(gè)存儲單元存儲一個(gè)頁數(shù)據(jù)域相對于共享內(nèi)存空間的首地址的地址偏移量,從而通過??臻g可以快速訪問頁數(shù)據(jù)域任一條數(shù)據(jù),從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
如圖7所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟701至703:
701、基于預(yù)設(shè)的鏈表模式:表list,將待管理的共享內(nèi)存空間初始化為公共區(qū)和私有區(qū),且在所述私有區(qū)中初始化一塊具有歸類標(biāo)識slot空間的屬性區(qū),所述n為slot的預(yù)設(shè)個(gè)數(shù),所述slot空間用于存放該slot當(dāng)前使用的鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量,并將第一個(gè)鏈表結(jié)點(diǎn)的數(shù)據(jù)域相對所述共享內(nèi)存空間的首地址的地址偏移量、最后一個(gè)鏈表結(jié)點(diǎn)的數(shù)據(jù)域相對所述共享內(nèi)存空間的首地址的地址偏移量存放到所述屬性區(qū)的非slot空間中。
步驟702~703與圖1所示的步驟102~103相同,在此不再贅述。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:表list,將共享內(nèi)存空間分為多個(gè)歸類標(biāo)識slot,每個(gè)slot有slot空間,這樣寫入的多條數(shù)據(jù)被歸類到不同的slot空間,讀數(shù)據(jù)時(shí)可基于slot空間快速找到待讀取的數(shù)據(jù)的位置,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
進(jìn)一步地,本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式: 表list,與vector模式不同,list模式在初始化時(shí)不需要固定每次增加數(shù)據(jù)的長度,因此在頻繁增加、刪除數(shù)據(jù)的場景可以實(shí)現(xiàn)高效的共享內(nèi)存空間管理。
進(jìn)一步地,本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:表list,與vector模式相比,vector模式可通過下標(biāo)方式訪問數(shù)據(jù),list模式的數(shù)據(jù)地址不連續(xù),不能通過下標(biāo)方式來訪問數(shù)據(jù),速度上沒有vector模式快,但是list模式通過slot對數(shù)據(jù)歸類,不像vector模式具有若干頁信息域,因此,可騰出更多空間存放數(shù)據(jù),并且可以加快搜索數(shù)據(jù)的速度。
vector模式通過下標(biāo)方式訪問數(shù)據(jù)舉例如下:
下標(biāo)為31,則表示要訪問第31條數(shù)據(jù)。
頁以0開始編號,則,第31條數(shù)據(jù)訪問的過程如下:31除以30(每頁30條)為1余1,前一個(gè)1表示數(shù)據(jù)在第1頁,后一個(gè)1表示數(shù)據(jù)在第1條。
頁以1開始編號,則,第31條數(shù)據(jù)訪問的過程如下:31除以30(每頁30條)為1余1,前一個(gè)1表示數(shù)據(jù)在第2頁即商加1,后一個(gè)1表示數(shù)據(jù)在第1條。
如圖8所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟801至803:
步驟801與圖7所示的步驟701相同,在此不再贅述。
802、在接收到一條待寫入的數(shù)據(jù)時(shí),從所述私有區(qū)的非屬性區(qū)為該條數(shù)據(jù)申請一個(gè)數(shù)據(jù)域長度為該條數(shù)據(jù)長度的鏈表結(jié)點(diǎn)空間。
步驟803與圖7所示的步驟703相同,在此不再贅述。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:表list,基于寫入數(shù)據(jù)的長度來申請鏈表結(jié)點(diǎn)空間,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
如圖9所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包 括以下步驟901至906:
步驟901~902與圖7所示的步驟701~702相同,在此不再贅述。
903、基于預(yù)設(shè)的哈希規(guī)則哈希該條數(shù)據(jù),得到該條數(shù)據(jù)的哈希值。
904、基于各slot預(yù)設(shè)的哈希值范圍,確定該條數(shù)據(jù)的哈希值所屬的目標(biāo)哈希值范圍,得到目標(biāo)slot空間。
905、將該鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量存放到所述目標(biāo)slot空間中。
步驟906與圖7所示的步驟703相同,在此不再贅述。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:表list,在將一條數(shù)據(jù)寫入到一個(gè)鏈表結(jié)點(diǎn)的數(shù)據(jù)域前,通過采用哈希處理的方式,確定該條數(shù)據(jù)屬于哪個(gè)slot,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
如圖10所示,本實(shí)施例公開一種共享內(nèi)存空間的管理方法,可包括以下步驟1001至1003:
步驟1001~1002與圖7所示的步驟701~702相同,在此不再贅述。
1003、將該條數(shù)據(jù)寫入到該鏈表結(jié)點(diǎn)的數(shù)據(jù)域,在該鏈表結(jié)點(diǎn)的指針域記錄該鏈表結(jié)點(diǎn)的數(shù)據(jù)域相對所述共享內(nèi)存空間的首地址的地址偏移量、與該鏈表結(jié)點(diǎn)同屬一個(gè)slot的前一鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量以及后一鏈表結(jié)點(diǎn)的指針域相對所述共享內(nèi)存空間的首地址的地址偏移量。
本實(shí)施例的共享內(nèi)存空間的管理方法,采用鏈表模式:表list,在鏈表結(jié)點(diǎn)的指針域記錄與該鏈表結(jié)點(diǎn)相關(guān)的鏈表結(jié)點(diǎn)相對所述共享內(nèi)存空間的首地址的地址偏移量,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
需要說明的是,實(shí)施例中僅舉出兩種鏈表模式,本領(lǐng)域技術(shù)人員可基于本發(fā)明的思想,設(shè)計(jì)不同的鏈表模式,實(shí)現(xiàn)采用鏈表模式,鏈 表結(jié)點(diǎn)的指針域記錄相對共享內(nèi)存空間首地址的地址偏移量,從而實(shí)現(xiàn)高效靈活的共享內(nèi)存空間管理。
需要說明的是,本領(lǐng)域技術(shù)人員可基于實(shí)施例公開的共享內(nèi)存空間的管理方法涉及對應(yīng)的共享內(nèi)存空間的管理軟件或硬件。
本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。
雖然結(jié)合附圖描述了本發(fā)明的實(shí)施方式,但是本領(lǐng)域技術(shù)人員可以在不脫離本發(fā)明的精神和范圍的情況下做出各種修改和變型,這樣的修改和變型均落入由所附權(quán)利要求所限定的范圍之內(nèi)。