元素存儲方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機(jī)領(lǐng)域,具體而言,涉及一種元素存儲方法及裝置。
【背景技術(shù)】
[0002]二叉查找樹是一種數(shù)據(jù)結(jié)構(gòu),主要用于快速查詢一個元素是否存在于某一個集合中。傳統(tǒng)的二叉查找樹是基于動態(tài)分配內(nèi)存的方式實現(xiàn)的,即集合中的每個元素的存放位置在內(nèi)存中都是不連續(xù)的。當(dāng)需要向內(nèi)存中添加新元素時,動態(tài)分配一塊內(nèi)存用于存放新的元素,同理,當(dāng)需要刪除元素時,也是動態(tài)的釋放該元素占用的內(nèi)存。
[0003]圖1為相關(guān)技術(shù)中向內(nèi)存中添加元素的效果圖。如圖1所示,集合中總共有5個元素(編號為I?5),每個元素由三部分(左邊長方形圖案代表元素本身,右邊的兩個正方形分別表示它兩個后續(xù)元素的內(nèi)存地址,即圖中的箭頭符號,當(dāng)不存在后續(xù)元素時,用向右斜杠表示)構(gòu)成。
[0004]最開始的時候,集合是空的,圖1是5次添加操作后的效果圖,由于添加的時候是采用動態(tài)分配內(nèi)存的方式,所以可以看見元素在內(nèi)存中不是連續(xù)存放的,當(dāng)需要刪除元素時,釋放掉元素相應(yīng)的內(nèi)存即可。
[0005]經(jīng)過這樣大量的添加和刪除元素操作后,內(nèi)存中會出現(xiàn)大量的內(nèi)存碎片(碎片的大小等于元素刪除前占用的內(nèi)存大小),導(dǎo)致當(dāng)操作系統(tǒng)需要一塊大于碎片大小的內(nèi)存時,這些碎片都不能滿足需求,從而這些碎片得不到利用。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的主要目的在于公開了一種元素存儲方法及裝置,以至少解決相關(guān)技術(shù)中基于動態(tài)分配內(nèi)存,經(jīng)過這樣大量的添加和刪除元素操作后,內(nèi)存中會出現(xiàn)大量的內(nèi)存碎片的問題。
[0007]根據(jù)本發(fā)明的一個方面,提供了一種元素存儲方法。
[0008]根據(jù)本發(fā)明的元素存儲方法包括:預(yù)先分配一整塊預(yù)定大小的內(nèi)存;對于需要存儲集合中的每個元素,將該元素存儲至所述內(nèi)存當(dāng)前的第一個空閑位置;當(dāng)所述內(nèi)存被占用完時,繼續(xù)分配一整塊預(yù)定大小的內(nèi)存以存儲所述集合中的元素,直至存儲完所述集合中的所有元素。
[0009]根據(jù)本發(fā)明的另一方面,提供了一種元素存儲裝置。
[0010]根據(jù)本發(fā)明的元素存儲裝置包括:第一分配模塊,用于預(yù)先分配一整塊預(yù)定大小的內(nèi)存;存儲模塊,用于對于需要存儲集合中的每個元素,將該元素存儲至所述內(nèi)存當(dāng)前的第一個空閑位置;第二分配模塊,用于當(dāng)所述內(nèi)存被占用完時,繼續(xù)分配一整塊預(yù)定大小的內(nèi)存以存儲所述集合中的元素,直至存儲完所述集合中的所有元素。
[0011]與現(xiàn)有技術(shù)相比,本發(fā)明實施例至少具有以下優(yōu)點:預(yù)先分配一定容量內(nèi)存(靜態(tài)分配)的方式,能有效的減少傳統(tǒng)方式造成的計算機(jī)內(nèi)存碎片浪費,提高系統(tǒng)性能,特別是在小型機(jī),如單片機(jī),手機(jī)等設(shè)備中效果顯著。
【附圖說明】
[0012]圖1為相關(guān)技術(shù)中向內(nèi)存中添加元素的效果圖;
[0013]圖2是根據(jù)本發(fā)明實施例的元素存儲方法的流程圖;
[0014]圖3是根據(jù)本發(fā)明優(yōu)選實施例的向內(nèi)存中添加元素的效果圖;
[0015]圖4是根據(jù)本發(fā)明實施例的元素存儲裝置的結(jié)構(gòu)框圖;
[0016]圖5是根據(jù)本發(fā)明優(yōu)選實施例的元素存儲裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0017]下面結(jié)合說明書附圖對本發(fā)明的具體實現(xiàn)方式做一詳細(xì)描述。
[0018]圖2是根據(jù)本發(fā)明實施例的元素存儲方法的流程圖。如圖2所示,該元素存儲方法包括以下處理:
[0019]步驟S201:預(yù)先分配一整塊預(yù)定大小的內(nèi)存;
[0020]步驟S203:對于需要存儲集合中的每個元素,將該元素存儲至上述內(nèi)存當(dāng)前的第一個空閑位置;
[0021]步驟S205:當(dāng)上述內(nèi)存被占用完時,繼續(xù)分配一整塊預(yù)定大小的內(nèi)存以存儲上述集合中的元素,直至存儲完上述集合中的所有元素。
[0022]采用圖2所示的方法,預(yù)先分配一定容量內(nèi)存(靜態(tài)分配)的方式,能有效的減少傳統(tǒng)方式造成的計算機(jī)內(nèi)存碎片浪費,提高系統(tǒng)性能,特別是在小型機(jī),如單片機(jī),手機(jī)等設(shè)備中效果顯著。
[0023]其中,上述集合中的各個元素均可以包括但不限于:元素本身,該元素的兩個后續(xù)元素的數(shù)組下標(biāo)。
[0024]優(yōu)選地,上述方法還可以包括以下處理:當(dāng)需要刪除上述集合中的一個或多個元素時,僅刪除上述一個或多個元素,不將上述一個或多個元素占用的內(nèi)存釋放掉。
[0025]因而,元素占用的內(nèi)存還是屬于集合,不會返還給系統(tǒng),不會造成內(nèi)存碎片,這樣就避免了由于存放元素的內(nèi)存不連續(xù)產(chǎn)生的內(nèi)存碎片浪費。
[0026]以下結(jié)合圖3進(jìn)一步描述上述優(yōu)選實施方式。
[0027]圖3是根據(jù)本發(fā)明優(yōu)選實施例的向內(nèi)存中添加元素的效果圖。如圖3所示,一個集合中,包括5個元素(node O,node I,node 2,node 3,node 4)。其中,每個元素包括三部分:最左側(cè)的長方形圖案表示元素本身,右側(cè)的兩個正方形表示該元素兩個后續(xù)元素的數(shù)組下標(biāo)。
[0028]如圖3示,本發(fā)明實施例采用了連續(xù)的存放方式,即提前分配一塊相對較大的內(nèi)存(數(shù)組),需要增加元素時,添加到預(yù)先分配好的內(nèi)存的第一個空閑位置即可,當(dāng)提前分配的內(nèi)存用完時,繼續(xù)分配一整塊預(yù)定大小的內(nèi)存以存儲上述集合中的元素,例如,可以將數(shù)組擴(kuò)大一倍。當(dāng)需要刪除元素時,元素占用的內(nèi)存還是屬于集合,不會返還給系統(tǒng),不會造成內(nèi)存碎片,這樣就避免了由于存放元素的內(nèi)存不連續(xù)產(chǎn)生的內(nèi)存碎片浪費。
[0029]優(yōu)選地,步驟S205中存儲完上述集合中的所有元素之后,還可以包括以下處理:
[0030]步驟A,當(dāng)需要查找當(dāng)前元素是否屬于上述集合時,比較上述集合中的第一個元素的元素本身與當(dāng)前元素的大小,根據(jù)比較結(jié)果,獲取第一個元素的兩個后續(xù)元素的數(shù)組下標(biāo)中的一個下標(biāo)值;
[0031]步驟B,確定與上述獲取的下標(biāo)值對應(yīng)的元素,比較上述對應(yīng)的元素與上述當(dāng)前元素的大小,根據(jù)比較結(jié)果,獲取上述對應(yīng)的元素的兩個后續(xù)元素的數(shù)組下標(biāo)中的一個下標(biāo)值,其中,上述步驟B循環(huán)執(zhí)行;
[0032]步驟C,當(dāng)查找到與上述當(dāng)前元素大小相等的元素時,確定上述當(dāng)前元素屬于上述
口 O
[0033]例如,當(dāng)需要查找當(dāng)前元素是否屬于圖3所示的集合時,比較上述集合中的nodeO的元素本身與當(dāng)前元素的大小,如果node O的元素本身大于當(dāng)前元素的大小,則獲取node O的數(shù)組下標(biāo)中的2,之后查找node 2,比較上述集合中的node 2的元素本身與當(dāng)前元素的大小,如果node 2的元素本身大于當(dāng)前元素的大小,則獲