欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于通過面向?qū)ο蟮某绦驁?zhí)行動態(tài)內(nèi)存管理的方法和設(shè)備的制作方法

文檔序號:6387310閱讀:164來源:國知局
專利名稱:用于通過面向?qū)ο蟮某绦驁?zhí)行動態(tài)內(nèi)存管理的方法和設(shè)備的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及面向?qū)ο蟮能浖到y(tǒng),更加特別地涉及在該系統(tǒng)中用于對象分配的動態(tài)內(nèi)存管理。
背景技術(shù)
面向?qū)ο蟮某绦?OOP)已經(jīng)被認為具有超出典型的過程式程序的優(yōu)點,其包括代碼復用繼承、數(shù)據(jù)抽象的實現(xiàn)、數(shù)據(jù)的多態(tài)的真實性(factuality)、重載操作符的便利性。OOP的那些豐富的特性正不斷地變得更加先進。同時,從日益增長的數(shù)量的研究來看,現(xiàn)在動態(tài)內(nèi)存管理(DMM)被認為是軟件系統(tǒng)的運行中的重要部分,其消耗掉其中30%的程序運行時間。因此,動態(tài)內(nèi)存管理的重要性變得更大,并且實施DMM的更高效率需要提高系統(tǒng)中的程序運行速度。
如圖1和2所示,通常以不考慮對象大小的內(nèi)存分配方式實行DMM。參照圖1,在步驟S103中,如果有通過操作系統(tǒng)(OS)的方式對內(nèi)存的請求,例如通過內(nèi)存管理(或分配)函數(shù)malloc()而對函數(shù)sbrk()的調(diào)用,則將該內(nèi)存分配給堆。然后,在步驟105中,由內(nèi)存管理單元產(chǎn)生空閑鏈接列表,以將對象分配給被分割成足夠大小的分區(qū)的內(nèi)存(參照圖2的過程A)。
如果有對對象分配的請求,則在步驟S107掃描空閑鏈接列表,以尋找具有與請求分配的對象相同大小的節(jié)點。在步驟S109中,確定是否存在與所請求的對象的大小相同的節(jié)點。如果空閑鏈接列表具有與所請求的對象的大小相同的節(jié)點,則從空閑鏈接列表釋放該節(jié)點,然后將其放入步驟S111中的對象分配過程。另一方面,如果在空閑鏈接列表中沒有與所請求的對象大小一致的節(jié)點,則在步驟S113確定所請求的對象的大小是否大于空閑鏈接列表的節(jié)點。如果所請求的對象大于空閑鏈接列表的節(jié)點,則在步驟S115,將空閑鏈接列表的節(jié)點合并成單個節(jié)點(參照圖2的過程B),并且在步驟S117,從將用于分配對象的空閑鏈接列表釋放所合并的節(jié)點。反之,如果所請求的對象小于空閑鏈接列表的節(jié)點,則在步驟S119中,該節(jié)點被分割成較小的節(jié)點(參照圖2的過程C),并且在步驟S121,從將用于分配對象的空閑鏈接列表釋放所分割的節(jié)點。
順便提及,如果刪除所分配的對象,則將分配給該對象的節(jié)點插入空閑鏈接列表,用于重用。這樣做時,可以將大到不能插入到空閑鏈接列表中的節(jié)點分割成足以插入其中的更小節(jié)點。
然而,DMM的常規(guī)方式在運行時消耗掉相當可觀的運行時間,因為其本質(zhì)上需要掃描空閑鏈接列表、以及合并和分割組成該空閑鏈接列表的節(jié)點的條件。有時候,它會與應當完全搜索空閑鏈接列表的最壞情況一起出現(xiàn)。
此外,無論何時有對象分配的請求,均強行調(diào)用函數(shù)malloc(),以及實施對空閑鏈接列表的掃描及節(jié)點的合并與分割。

發(fā)明內(nèi)容
本發(fā)明提出了一種方法和設(shè)備,用于運行具有提高了的性能的動態(tài)內(nèi)存管理。
本發(fā)明還提出了一種方法和設(shè)備,用于在有效地較短的運行時間內(nèi)執(zhí)行動態(tài)內(nèi)存管理。
根據(jù)本發(fā)明的一方面,實施了一種用于通過面向?qū)ο蟮某绦虻膭討B(tài)內(nèi)存管理的方法,其包括以下步驟形成用于對象分配的空閑鏈接列表;通過參照該空閑鏈接列表,將超過預定閾值的大對象分配給通過合并多個節(jié)點以與該大對象的大小相同而產(chǎn)生的節(jié)點;順序?qū)⑿∮诨蚺c閾值相同的小對象分配給具有大于該閾值的存儲容量的內(nèi)存塊;當在空閑重用列表中存在對應于該對象的可重用對象時,將該對象分配給被指定給該可重用對象的內(nèi)存塊的特定區(qū)域。
該內(nèi)存塊與數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián),該數(shù)據(jù)結(jié)構(gòu)包括有關(guān)所分配的對象的信息;地址指針,其指明所分配的對象被指定的地址;以及釋放對象指針,其指示從內(nèi)存塊釋放的對象。參照閾值,由包括空指針元素的排列形成空閑重用列表。對應于所釋放的對象的空指針中的一個指示所釋放的對象。
空指針指示當前一個所釋放的對象,被指定給當前釋放的對象的釋放對象指針指示前一個所釋放的對象。
閾值的大小通過分析在面向?qū)ο蟮某绦蛑蓄l繁創(chuàng)建和消失的對象而確定。
結(jié)合附圖,根據(jù)對其示例實施例的下列詳細描述,將會更好地理解本發(fā)明,并且,其范圍將在所附權(quán)利要求中指出。


當結(jié)合附圖時,通過參照下面的描述,可以對本發(fā)明有更加完整的理解,其中圖1是示出了用于對象的內(nèi)存分配的傳統(tǒng)過程的流程圖;圖2圖示了圖1所示的內(nèi)存分配的序列;圖3是根據(jù)本發(fā)明的用于對象分配和重用的數(shù)據(jù)結(jié)構(gòu)的圖示;圖4是圖示了根據(jù)本發(fā)明的對象分配過程的流程圖;圖5是根據(jù)本發(fā)明的對象分配的圖示;圖6是圖示了根據(jù)本發(fā)明的對象釋放的過程的流程圖;圖7是圖示了根據(jù)本發(fā)明的空閑重用列表的模式的示意圖;以及圖8是圖示了根據(jù)本發(fā)明的對象分配和重用的過程的流程圖。
具體實施例方式
應當理解,對本優(yōu)選實施例的描述只是示意性的,并且不應當理解為限制性的意義。在下面的詳細描述中,闡述了幾個特定的細節(jié),以提供對本發(fā)明的透徹理解。然而,對于本領(lǐng)域技術(shù)人員來說,顯而易見的是,可以沒有這些特定的細節(jié)而實踐本發(fā)明。
現(xiàn)在,將結(jié)合附圖來說明本發(fā)明的實踐實施例。
圖3圖示了在面向?qū)ο蟮南到y(tǒng)中用于對象分配和重用的數(shù)據(jù)結(jié)構(gòu)。用于對象分配和重用的該數(shù)據(jù)結(jié)構(gòu)包括用于對象大小(alloc_size)、地址指針(*return_pointer)、以及釋放對象指針(*next_f)的域。alloc_size指示將被分配的對象的大小。*return_pointer指示將指定給對象的內(nèi)存塊地址。*next_f表示將從內(nèi)存塊釋放的對象。
圖4和5圖示了在本面向?qū)ο蟮南到y(tǒng)中分配對象的過程和特征。參照圖4,在步驟S401中如果有對對象分配的請求,則在步驟S403確定所請求的對象的大小是否小于預定的閾值或者與其相同。該閾值可以從對對象分配模式的分析而獲得,該模式實際上從面向?qū)ο蟮某绦?OOP)產(chǎn)生。例如,從對OOP例如C++程序的分析注意到,幾乎超過90%的對象都在其中重用,其大小非常小,最多不超過512字節(jié)。因此,關(guān)于對象的大小,將閾值確立在512字節(jié)上是合理的。
如果所請求的對象大小小于閾值或與閾值相同,則在步驟S405中,提供預定存儲容量的內(nèi)存塊以分配所請求的對象。該內(nèi)存塊可以從由內(nèi)存管理函數(shù)malloc()形成的空閑鏈接列表得到。該內(nèi)存塊的大小可以大于閾值,例如8K字節(jié)。
在步驟S407中,小于閾值的對象被按照如圖5所示的順序分配進內(nèi)存塊,依據(jù)其分配大小而占用該內(nèi)存塊。在內(nèi)存塊中,新分配的對象被布置在其中,以跟在先前分配的對象之后。因為是以預定的順序?qū)ο蠓峙溥M內(nèi)存塊,所以在將任意對象分配給內(nèi)存塊之前,可以容易地知道返回地址。對數(shù)據(jù)結(jié)構(gòu)大小、所請求的對象大小、以及當前地址的預先確認使得先前所分配的對象的最后地址被容易地估計出來。通過將先前所分配的對象的最后地址和將分配給該最后地址的對象的大小相加,而獲得將分配的對象的返回地址。當按順序?qū)ο蠓峙浣o內(nèi)存塊時,釋放對象指針指示“NULL”。
因為對象被分配給這樣的單個內(nèi)存塊,所以有可能降低對函數(shù)malloc()的調(diào)用的次數(shù)。在本發(fā)明的這個實施例中,消耗了用于前面分配的一個內(nèi)存塊之后的進一步的對象分配將參照空閑鏈接列表,該空閑鏈接列表借助于函數(shù)malloc()而將新的內(nèi)存塊指定到其中。
在步驟S403確定了所請求的對象大小大于閾值之后,借助于內(nèi)存管理函數(shù)malloc()而轉(zhuǎn)向用于對象分配的操作。也就是說,在步驟S409,掃描空閑鏈接列表,以找到具有與被請求分配的對象相同大小的節(jié)點。然后,刪除與所請求的對象相同大小的節(jié)點,并將所請求的對象分配到該節(jié)點被刪除的位置上。實際上,很少創(chuàng)建這種具有超過閾值的更大大小的對象,其對用于掃描空閑鏈接列表、以及合并和分割較大的對象上的節(jié)點的時間消耗來說,是可以忽略的。
圖6圖示了根據(jù)本發(fā)明的用于釋放對象的處理步驟。首先,在步驟S601中,請求解除分配已被分配給內(nèi)存塊的對象。然后,在步驟S603將請求解除分配的對象的大小與閾值相比較。
如果被請求解除分配的對象大小小于或等于閾值,則從內(nèi)存塊釋放該對象,并將其添加到空閑重用列表上用于重用。如果被請求解除分配的對象的大小大于閾值,則在步驟S607中,在內(nèi)存管理函數(shù)malloc()的控制下釋放該對象。
通過利用指針型排列(arrangement)的方式,可以容易地形成空閑重用列表。將空閑重用列表中排列的大小設(shè)置到等于閾值,并以“NULL”的狀態(tài)初始化該排列中指定的指針。當從內(nèi)存塊釋放的對象被添加到空閑重用列表上時,空閑重用列表中對應于該處的指針指示所釋放的對象。這么做時,如果先前釋放的具有相同大小的對象鏈接到空閑重用列表,則對應于當前釋放的對象的、已用NULL狀態(tài)初始化的釋放對象指針*next_f指示以前釋放的對象,而存儲在排列中的指針指示當前釋放的對象。
另外,當前釋放的對象可以鏈接到與空閑重用列表連接的先前釋放的對象,其意味著對應于先前釋放的對象的指針*next_f指示當前釋放的對象。
圖7圖示了空閑重用列表的創(chuàng)建模式。參照圖7,所釋放的對象被添加到該列表上。通過采用指針型排列,將空閑重用列表表示為索引的列表。如果將對象從內(nèi)存塊釋放出來,則存儲在排列中的與那里相對應的元素中的指針指示所釋放的對象。換句話說,所釋放的對象被鏈接到空閑重用列表。因此,通過確認存儲在該排列的每個元素中的指針是否處于NULL狀態(tài),很容易識別出列表中可重用對象的存在。
作為示例,如圖7所示,確立閾值為512字節(jié),空閑重用列表的排列由512個NULL狀態(tài)指針的元素組成。如果從內(nèi)存塊釋放1字節(jié)大小的對象,則存儲在排列的第一元素中的NULL狀態(tài)指針P1表示所釋放的1字節(jié)對象。并且,當再次從內(nèi)存塊釋放另一個1字節(jié)對象時,指針P1指示當前所釋放的對象,并且,釋放對象指針*next_f指示先前所釋放的對象。利用該方式,從內(nèi)存塊釋放的對象被添加到空閑重用列表上。
索引的空閑重用列表有利于添加所釋放的對象和找到可重用對象。
圖8示出了根據(jù)本發(fā)明的處理對象分配和重用的流程。參照圖8,在程序(即面向?qū)ο蟮某绦?的開始,在步驟S801,內(nèi)存管理函數(shù)malloc()通過操作系統(tǒng)(OS)將內(nèi)存分配給該程序。接下來,在步驟S803,比較請求分配的對象和閾值的大小。如果請求分配的對象的大小大于閾值,則在步驟S805中,函數(shù)malloc()提供具有預定容量(例如8K字節(jié))的內(nèi)存塊。
然后,在步驟S807,確定所請求的對象是否為新分配的,其為用來確認存儲在對應于所請求的對象的排列的元素中的指針保持在NULL狀態(tài)的過程。除非該指針為NULL狀態(tài)(即如果有可重用對象),則在步驟S809中,通過存儲在排列中的指針所指明的可重用對象的地址指針,將所請求的對象分配給該對象返回的內(nèi)存塊的地址。并且,從空閑重用列表刪除該可重用對象。
如果在步驟S807中確定沒有可重用對象,則依據(jù)圖4和5的過程進行分配處理。
同時,如果在步驟S803,所請求的用于分配的對象的大小大于閾值,則參照空閑鏈接列表,由內(nèi)存管理函數(shù)malloc()進行分配。
基于前面所述,通過利用依據(jù)對象大小區(qū)分的內(nèi)存管理,系統(tǒng)性能得以增強。因為頻繁創(chuàng)建和消失的小對象被專門地驅(qū)趕進內(nèi)存塊中的具有順序連貫性的分配系統(tǒng),由于用于內(nèi)存管理函數(shù)malloc()的調(diào)用的次數(shù)比常規(guī)大大減少,因此縮短了用于對象分配的處理時間。此外,因為索引的空閑重用列表被提供用來重用從內(nèi)存塊中釋放的對象,所以不僅減少了系統(tǒng)中的處理開銷,還增加了系統(tǒng)管理速度。
盡管已經(jīng)出于示意的目的闡述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域技術(shù)人員將會理解,在不偏離如所附權(quán)利要求所述的本發(fā)明的范圍和精神的情況下,進行各種修改、添加和置換是可能的。
權(quán)利要求
1.一種方法,用于通過面向?qū)ο蟮某绦蜻M行動態(tài)內(nèi)存管理,該方法包括以下步驟提供具有預定存儲容量的內(nèi)存塊;以及將對象順序連續(xù)分配給該內(nèi)存塊。
2.根據(jù)權(quán)利要求1的方法,還包括提供空閑重用列表的步驟,從內(nèi)存塊釋放的對象作為對應于所釋放的對象的可重用對象而被添加到該空閑重用列表。
3.根據(jù)權(quán)利要求2的方法,還包括以下步驟對應于所請求的用于分配的對象而在空閑重用列表中找到可重用對象;當在空閑重用列表中有對應于所請求的對象的可重用對象時,將該所請求的對象分配給被指定給該可重用對象的內(nèi)存塊的特定域,并從空閑重用列表刪除可重用對象;以及當空閑重用列表缺少對應于所請求的對象的可重用對象時,在內(nèi)存塊中進行排在最末次序上的對象之后的新的分配。
4.根據(jù)權(quán)利要求1到3中的一個的方法,還包括以下步驟提供用于對象分配的空閑鏈接列表;當有對小于閾值或與閾值相同的小對象的分配請求時,參照空閑鏈接列表的節(jié)點,指定具有至少大于閾值的預定的存儲容量的內(nèi)存塊,該內(nèi)存塊的存儲容量足以包含請求分配的小對象;以及當有對大對象的分配請求時,參照空閑鏈接列表創(chuàng)建對應于超過閾值的大對象的節(jié)點。
5.一種方法,用于通過面向?qū)ο蟮某绦蜻M行動態(tài)內(nèi)存管理,該方法包括以下步驟(a)提供用于分配多個對象的內(nèi)存塊;(b)當在空閑重用列表中有對應于所請求的對象的可重用對象時,將該所請求的對象分配給被指定給該可重用對象的內(nèi)存塊的特定域,并從空閑重用列表刪除該可重用對象;(c)當空閑重用列表缺少對應于所請求的對象的可重用對象時,在內(nèi)存塊中進行排在最后次序上的對象之后的新的分配;以及(d)將從內(nèi)存塊釋放的對象添加到與該被釋放的對象相對應的空閑重用列表。
6.根據(jù)權(quán)利要求5的方法,還包括在提供內(nèi)存塊之前比較所請求的對象的大小和預定的閾值的步驟,其中,利用步驟(a)到(d)管理小于閾值或與閾值相同的對象,以及借助于內(nèi)存管理函數(shù)管理大于閾值的對象。
7.根據(jù)權(quán)利要求5和6中的一個的方法,其中,所述內(nèi)存塊與用于被分配給該內(nèi)存塊的對象的數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián),該數(shù)據(jù)結(jié)構(gòu)包括有關(guān)所分配的對象的信息、指示所分配的對象被指定的地址的地址指針、以及指示從所述內(nèi)存塊釋放的對象的釋放對象指針;其中,參照預定的閾值的大小,由包括空指針的元素的排列形成空閑重用列表;以及,其中,對應于所釋放的對象的所述空指針中的一個指示該所釋放的對象。
8.根據(jù)權(quán)利要求7的方法,其中,當所述空指針指示當前的一個所釋放的對象時,被指定給該當前釋放的對象的釋放對象指針指示前一個所釋放的對象。
9.一種方法,用于通過面向?qū)ο蟮某绦蜻M行動態(tài)內(nèi)存管理,該方法包括以下步驟形成用于對象分配的空閑鏈接列表;參照空閑鏈接列表,將超過預定閾值的大對象分配給節(jié)點,其中通過合并多個節(jié)點而生成該節(jié)點,以與所述大對象的大小相同;按順序?qū)⑿∮诨蚺c閾值相同的小對象分配給具有大于該閾值的存儲容量的內(nèi)存塊;以及當空閑重用列表中有對應于所述對象的可重用對象時,將所述對象分配給被指定給該可重用對象的內(nèi)存塊的特定域。
10.根據(jù)權(quán)利要求9的方法,其中,所述內(nèi)存塊與數(shù)據(jù)結(jié)構(gòu)相關(guān)聯(lián),該數(shù)據(jù)結(jié)構(gòu)包括用于所分配的對象的信息、指示所分配的對象被指定的地址的地址指針、以及指示從所述內(nèi)存塊釋放的對象的釋放對象指針;其中,參照閾值,由包括空指針的元素的排列形成空閑重用列表;以及,其中,對應于所釋放的對象的所述空指針中的一個指示所釋放的對象。
11.根據(jù)權(quán)利要求10的方法,其中,當所述空指針指示當前的一個所釋放的對象時,被指定給當前釋放的對象的釋放對象指針指示前一個所釋放的對象。
12.根據(jù)權(quán)利要求9的方法,還包括,通過分析在面向?qū)ο蟮某绦蛑蓄l繁創(chuàng)建和消失的對象,確立閾值的大小的步驟。
13.一種設(shè)備,可通過面向?qū)ο蟮某绦蜻M行操作,包括被配置用來形成用于對象分配的空閑鏈接列表的裝置;被配置用來通過參照空閑鏈接列表,將超過預定閾值的大對象分配給節(jié)點,其中,通過合并多個節(jié)點以與大對象的大小相等而生成該節(jié)點的裝置;被配置用來按順序?qū)⑿∮诨蚺c閾值相同的小對象分配給具有大于該閾值的存儲容量的內(nèi)存塊的裝置;以及被配置用來當在空閑重用列表中有對應于所述對象的可重用對象時,將所述對象分配給被指定給該可重用對象的內(nèi)存塊的特定域的裝置。
14.根據(jù)權(quán)利要求13的方法,其中,參照閾值,由包括空指針的元素的排列形成所述空閑重用列表;以及,其中,對應于所釋放的對象的空指針中的一個指示該所釋放的對象。
全文摘要
本發(fā)明公開是一種方法和設(shè)備,用于通過面向?qū)ο蟮某绦蜻\行動態(tài)內(nèi)存管理,通過該方法和設(shè)備,創(chuàng)建頻繁和生存期限短暫的對象被按順序分配給單位內(nèi)存塊。在從單位內(nèi)存塊釋放之后,該對象被添加到空閑重用列表上,以便當有對相同對象大小的分配的調(diào)用時被重用。這有利于增強系統(tǒng)性能。
文檔編號G06F12/00GK1604051SQ20041001190
公開日2005年4月6日 申請日期2004年9月24日 優(yōu)先權(quán)日2003年9月30日
發(fā)明者李宇珩 申請人:三星電子株式會社
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
恭城| 新巴尔虎右旗| 黄浦区| 江门市| 松滋市| 两当县| 武宁县| 本溪市| 志丹县| 乌鲁木齐市| 垫江县| 沧源| 云霄县| 额济纳旗| 乌鲁木齐市| 玉龙| 丰原市| 宣威市| 宁都县| 万山特区| 东源县| 商南县| 铁岭市| 巴南区| 望谟县| 安康市| 岑溪市| 托克逊县| 德令哈市| 凯里市| 铜鼓县| 福州市| 嘉祥县| 宁化县| 雷波县| 江陵县| 拉萨市| 通州区| 克什克腾旗| 太康县| 靖边县|