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

一種中間件內(nèi)存管理方案的制作方法

文檔序號(hào):6334849閱讀:224來源:國(guó)知局
專利名稱:一種中間件內(nèi)存管理方案的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及系統(tǒng)開發(fā)工作中的內(nèi)存管理方法,尤其涉及在產(chǎn)品開發(fā)尤其是中間件的開發(fā)過程中的內(nèi)存管理方法。
背景技術(shù)
內(nèi)存管理是很多系統(tǒng)開發(fā)工作需要考慮的問題,能夠高效穩(wěn)定的管理內(nèi)存是一個(gè)系統(tǒng)可靠運(yùn)行的前提條件。而目前已有的內(nèi)存管理系統(tǒng)的實(shí)現(xiàn)方案中,主要考慮了內(nèi)存管理的以下幾個(gè)方面1、建立內(nèi)存物理地址和邏輯地址的映射關(guān)系,對(duì)內(nèi)存物理頁面信息的維護(hù)等。這種管理系統(tǒng)涉及到硬件層面,主要用于嵌入式系統(tǒng)的開發(fā)。2、對(duì)內(nèi)存訪問的保護(hù)措施,主要是考慮對(duì)越界訪問內(nèi)存時(shí)需要采取的措施,防止緩沖區(qū)溢出的漏洞。3、對(duì)大量小塊內(nèi)存分配的管理方案,防止產(chǎn)生大量的內(nèi)存碎片。4、針對(duì)特定領(lǐng)域的內(nèi)存管理方案,如音頻視頻解碼過程、圖象處理過程、打印過程、網(wǎng)絡(luò)通信等領(lǐng)域。但是在中間件的開發(fā)過程中,多個(gè)模塊之間需要頻繁的共享數(shù)據(jù),且對(duì)性能有較高的要求,沒有一種現(xiàn)有的內(nèi)存管理的方案,能為中間件的開發(fā)提供一種高效穩(wěn)定的訪問內(nèi)存的方式,并能完成并發(fā)訪問數(shù)據(jù)時(shí)所需的同步數(shù)據(jù)的工作。

發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種中間件內(nèi)存管理的方法,解決現(xiàn)在內(nèi)存管理的方法不能滿足中間件內(nèi)存管理高效穩(wěn)定需要的缺陷。技術(shù)方案一種中間件內(nèi)存管理的方法,其特征在于包括以下步驟1)中間件應(yīng)用系統(tǒng)啟動(dòng),根據(jù)配置獲取一塊內(nèi)存區(qū)域,并初始化所述內(nèi)存區(qū)域; 初始化過程包括首先彳g所述內(nèi)存區(qū)域分為結(jié)構(gòu)化區(qū)和擴(kuò)展區(qū),再彳g結(jié)構(gòu)化區(qū)分為多個(gè)固定容量大小的存儲(chǔ)單元,并設(shè)有結(jié)構(gòu)化區(qū)總體頭部信息,保存該區(qū)的存儲(chǔ)單元信息,而在擴(kuò)展區(qū)設(shè)有擴(kuò)展區(qū)總體頭部信息,在所述擴(kuò)展區(qū)總體頭部信息中包括空閑單元鏈表和已用單元鏈表;2)運(yùn)行時(shí),當(dāng)有模塊根據(jù)需要在所述內(nèi)存區(qū)域內(nèi)申請(qǐng)一定大小的內(nèi)存時(shí),需要進(jìn)行內(nèi)存分配,分配過程包括判斷的步驟,即首先判斷所申請(qǐng)大小是否超過結(jié)構(gòu)化區(qū)存儲(chǔ)單元最大單元臨界值,分配的步驟,即判斷后如大小沒有超過,則在結(jié)構(gòu)化區(qū)中,按照申請(qǐng)內(nèi)存的大小查找空閑的存儲(chǔ)單元,如找到則分配成功,如沒有找到或所申請(qǐng)大小超過結(jié)構(gòu)化區(qū)存儲(chǔ)單元最大單元臨界值,則在擴(kuò)展區(qū)中查找,從空閑單元鏈表中找到一個(gè)大小足夠的單元,并1専找到的單元拆分成兩個(gè),一個(gè)按照申請(qǐng)的大小響應(yīng)這次申請(qǐng),放入已用單元鏈表,另一個(gè)保留在空閑單元鏈表,而如果找到的這個(gè)單元大小等于申請(qǐng)內(nèi)存的大小,則不用拆分,直接放入已用單元鏈表,如從空閑單元鏈表中沒有找到大小足夠的單元,則分配失敗,響應(yīng)的步驟,S卩如果分配成功,則返回可用的存儲(chǔ)單元的地址,如分配失敗,則返回空值;3)步驟2中所述可用的存儲(chǔ)單元使用完畢后,需要釋放,內(nèi)存釋放的過程包括判斷的步驟,根據(jù)傳入的地址判斷屬于結(jié)構(gòu)化區(qū)還是擴(kuò)展區(qū),釋放的步驟,如屬于結(jié)構(gòu)化區(qū),則更新結(jié)構(gòu)化區(qū)的頭部信息,彳専該存儲(chǔ)單元置為空閑狀態(tài),如屬于擴(kuò)展區(qū),則彳専該存儲(chǔ)單元移出已用單元鏈表,并查看該存儲(chǔ)單元是否有相鄰的空閑單元,如有相鄰的空閑單元,則彳専該存儲(chǔ)單元和相鄰的空閑單元合并為一個(gè)單元,并修改空閑單元鏈表,更新擴(kuò)展區(qū)的頭部信息。4)當(dāng)應(yīng)用系統(tǒng)停止,清除所述內(nèi)存區(qū)域的內(nèi)容。進(jìn)一步,所述結(jié)構(gòu)化區(qū)的多個(gè)固定容量大小的存儲(chǔ)單元分別包括多種不同的容量大小,每種容量大小的存儲(chǔ)單元有多個(gè)。所述多種容量大小的存儲(chǔ)單元中,相同容量大小的多個(gè)存儲(chǔ)單元位于同一存儲(chǔ)區(qū)域,并設(shè)有區(qū)域頭部信息。所述多種容量大小的存儲(chǔ)單元的容量大小為按照倍數(shù)遞增。所述區(qū)域頭部信息保存有該區(qū)域的存儲(chǔ)單元信息和鎖信息。所述區(qū)域頭部信息保存有區(qū)域內(nèi)各單元的使用者ID信息和使用時(shí)間信息。進(jìn)一步,所述擴(kuò)展區(qū)的存儲(chǔ)單元生成時(shí)設(shè)有單元頭部信息,所述單元頭部信息或包括該單元的使用者ID信息和使用時(shí)間信息。進(jìn)一步,所述中間件包括管理模塊,所述管理模塊定時(shí)檢查存儲(chǔ)單元的使用者ID 信息和使用時(shí)間信息,判斷該單元是否超出使用期限,彳専長(zhǎng)時(shí)間不釋放并且使用者模塊已經(jīng)異常退出的存儲(chǔ)單元進(jìn)行釋放。有益效果本發(fā)明實(shí)現(xiàn)了內(nèi)存高效穩(wěn)定的并發(fā)訪問,為應(yīng)用系統(tǒng)開發(fā)時(shí)存在的內(nèi)存管理的問題提供了一種通用的解決辦法,簡(jiǎn)化了開發(fā)工作。而且通過結(jié)合內(nèi)存區(qū)域的結(jié)構(gòu)化區(qū)和擴(kuò)展區(qū)的方式,解決了小塊內(nèi)存申請(qǐng)時(shí)的性能問題,同時(shí)支持大塊內(nèi)存的申請(qǐng),并減少了內(nèi)存碎片的產(chǎn)生。同時(shí),通過共享內(nèi)存及定時(shí)檢查的方式,解決了內(nèi)存使用的高效可靠性問題。


圖1為本發(fā)明中內(nèi)存分配過程示意框圖;圖2為本發(fā)明中內(nèi)存釋放過程示意框圖;圖3為本發(fā)明中結(jié)構(gòu)化區(qū)存儲(chǔ)單元示意圖;圖4為本發(fā)明中擴(kuò)展區(qū)存儲(chǔ)單元示意圖;圖5為本發(fā)明中擴(kuò)展區(qū)存儲(chǔ)單元拆分示意圖;圖6為本發(fā)明中擴(kuò)展區(qū)存儲(chǔ)單元合并示意圖。
具體實(shí)施例方式下面結(jié)合具體實(shí)施例和附圖,進(jìn)一步闡述本發(fā)明。本發(fā)明主要是為了針對(duì)中間件開發(fā)過程中,多個(gè)模塊之間需要頻繁的共享數(shù)據(jù), 并且對(duì)性能有較高要求的情況下,提供一種內(nèi)存管理的通用方案,為中間件的開發(fā)提供一種高效穩(wěn)定的訪問內(nèi)存的方式;而且能完成并發(fā)訪問數(shù)據(jù)時(shí)所需的同步數(shù)據(jù)的工作,提供應(yīng)用編程接口以簡(jiǎn)化并發(fā)訪問共享內(nèi)存時(shí)的開發(fā)工作。因此在結(jié)構(gòu)化區(qū)中,可以按照存儲(chǔ)單元的大小劃分成不同的存儲(chǔ)區(qū)域,存儲(chǔ)單元的大小還可以按照讓、21^、41^..等字節(jié)數(shù)依次遞增。每個(gè)存儲(chǔ)區(qū)域都設(shè)有各自的區(qū)域頭部信息,來保存該區(qū)域的存儲(chǔ)單元信息和鎖信息,同時(shí)對(duì)整個(gè)結(jié)構(gòu)化區(qū)維護(hù)一個(gè)結(jié)構(gòu)化區(qū)總體頭部信息,來反映結(jié)構(gòu)化區(qū)的整體情況。如附圖3結(jié)構(gòu)化區(qū)存儲(chǔ)單元示意圖所示。當(dāng)需要分配一塊內(nèi)存時(shí),按照所需內(nèi)存的大小直接找到滿足要求的空閑存儲(chǔ)單元,在頭部信息中將該單元置成已用狀態(tài);釋放內(nèi)存時(shí),則在頭部信息中將該單元置成空閑狀態(tài)。這樣設(shè)置的結(jié)構(gòu)化區(qū)主要有以下特點(diǎn)1)存儲(chǔ)單元在應(yīng)用系統(tǒng)啟動(dòng)階段就已經(jīng)分配好,在使用過程中存儲(chǔ)單元只有使用狀態(tài)(已用或空閑)會(huì)發(fā)生變化,因此減少了動(dòng)態(tài)分配內(nèi)存的開銷,提高性能;2)存儲(chǔ)單元的大小按照倍數(shù)遞增,存儲(chǔ)區(qū)域的數(shù)目和每個(gè)區(qū)域內(nèi)的存儲(chǔ)單元的數(shù)目是靜態(tài)的,因此比較適合存儲(chǔ)小塊的數(shù)據(jù);3)每個(gè)存儲(chǔ)區(qū)域維護(hù)一個(gè)鎖,在不同的存儲(chǔ)區(qū)域之間并發(fā)訪問時(shí)互不影響,提高
了吞吐量。而在擴(kuò)展區(qū)中,存儲(chǔ)單元的大小是在運(yùn)行時(shí)動(dòng)態(tài)變化的,因此可以為大塊的數(shù)據(jù)提供存儲(chǔ)空間。擴(kuò)展區(qū)設(shè)有一個(gè)擴(kuò)展區(qū)總體頭部信息來維護(hù)擴(kuò)展區(qū)的總體信息,并通過鏈表的方式彳専空閑的存儲(chǔ)單元和已用的存儲(chǔ)單元組織起來。如附圖4擴(kuò)展區(qū)存儲(chǔ)單元示意圖所示。當(dāng)需要分配一塊內(nèi)存時(shí),在空閑單元鏈表中找到一個(gè)大小合適的存儲(chǔ)單元,如果這個(gè)單元大小正好等于或略大于請(qǐng)求,則直接彳専這個(gè)單元移動(dòng)到已用單元的鏈表中,供請(qǐng)求者使用;否則就彳専這個(gè)單元拆分成兩部分,第一部分大小等于請(qǐng)求,并移動(dòng)到已用單元的鏈表,供調(diào)用者使用,第二部分仍然保留在空閑單元鏈表之中。過程中每個(gè)單元都設(shè)置單元頭部信息。如附圖5所示拆分示意圖。當(dāng)釋放內(nèi)存時(shí),則根據(jù)情況彳専被釋放存儲(chǔ)單元與周圍的空閑單元合并,組成一個(gè)大的空閑存儲(chǔ)單元,并彳専它移動(dòng)到空閑單元鏈表。如附圖6為一種情況下的合并示意圖,即釋放的存儲(chǔ)單元周圍都是空閑單元時(shí),合并為一個(gè)大的空閑單元的情況。實(shí)際上釋放的存儲(chǔ)單元周圍只要有一邊相鄰的存儲(chǔ)單元是空閑的, 就可以合并在一起,組成一個(gè)大的空閑單元。設(shè)置的擴(kuò)展區(qū)主要有以下特點(diǎn)1)存儲(chǔ)單元的大小可以動(dòng)態(tài)變化,適合存儲(chǔ)大塊的數(shù)據(jù);2)當(dāng)已用的存儲(chǔ)單元被釋放時(shí),可以和臨近的空閑存儲(chǔ)單元合并,結(jié)合內(nèi)存管理的可靠性保證措施,可以有效的減少內(nèi)存碎片的產(chǎn)生。由于應(yīng)用系統(tǒng)各模塊需要頻繁訪問在共享內(nèi)存數(shù)據(jù)存儲(chǔ)區(qū)內(nèi)的數(shù)據(jù),因此需要保
6證能夠穩(wěn)定可靠的存取共享內(nèi)存中的信息??稍谥虚g件設(shè)置管理模塊對(duì)存儲(chǔ)區(qū)進(jìn)行定時(shí)檢查,在上述的存儲(chǔ)單元的頭部信息中,還可以包含該單元的使用者ID和使用時(shí)間等信息,管理模塊可以根據(jù)這些信息來判斷該單元是否超出了使用期限,并根據(jù)使用者的狀態(tài)進(jìn)行相應(yīng)的處理;對(duì)于那些長(zhǎng)時(shí)間不釋放并且使用者模塊已經(jīng)異常退出的存儲(chǔ)單元進(jìn)行釋放。還可以通過控制信號(hào)量來同步各模塊對(duì)共享內(nèi)存的并發(fā)訪問,從而保證數(shù)據(jù)存取的正確完成。附圖1和附圖2分別為中間件的內(nèi)存管理的內(nèi)存分配和內(nèi)存釋放的過程示意框圖。整個(gè)內(nèi)存管理的步驟主要是包括先依照上述結(jié)構(gòu)化區(qū)和擴(kuò)展區(qū)的要求對(duì)內(nèi)存區(qū)域進(jìn)行初始化,結(jié)構(gòu)化區(qū)的初始數(shù)據(jù)包括存儲(chǔ)區(qū)域的個(gè)數(shù)以及每個(gè)區(qū)域內(nèi)的存儲(chǔ)單元個(gè)數(shù)等, 這些信息是靜態(tài)的,運(yùn)行中不會(huì)變化,而在擴(kuò)展區(qū)中初始化時(shí)只有一整塊的存儲(chǔ)單元,處于空閑狀態(tài),頭部信息中的空閑單元鏈表只有這一個(gè)元素,而已用單元鏈表是空的;當(dāng)有模塊申請(qǐng)內(nèi)存時(shí),根據(jù)申請(qǐng)的要求進(jìn)行內(nèi)存分配,分配給內(nèi)存區(qū)域中具體的存儲(chǔ)單元,該存儲(chǔ)單元使用完畢后,進(jìn)行內(nèi)存釋放,隨著運(yùn)行時(shí)的內(nèi)存申請(qǐng)和釋放,會(huì)彳専原有的存儲(chǔ)單元拆分和合并,并且生成的單元放到空閑單元鏈表或者已用單元鏈表中;當(dāng)應(yīng)用系統(tǒng)停止時(shí),清除所述內(nèi)存區(qū)域的內(nèi)容。本方案從功能上已實(shí)現(xiàn)了內(nèi)存高效穩(wěn)定的并發(fā)訪問,適用于具有以下要求的應(yīng)用系統(tǒng)的開發(fā)1)部署于同一臺(tái)主機(jī)上的多個(gè)模塊之間需要頻繁共享數(shù)據(jù),并且對(duì)性能和可靠性有較高的要求;2)模塊需要共享數(shù)據(jù)塊的大小在較大范圍內(nèi)變動(dòng)。本發(fā)明公布的內(nèi)存管理的方案,為應(yīng)用系統(tǒng)開發(fā)時(shí)存在的內(nèi)存管理的問題提供了一種通用的解決辦法,簡(jiǎn)化了開發(fā)工作。而且通過結(jié)合內(nèi)存區(qū)域的結(jié)構(gòu)化區(qū)和擴(kuò)展區(qū)的方式,解決了小塊內(nèi)存申請(qǐng)時(shí)的性能問題,同時(shí)支持大塊內(nèi)存的申請(qǐng),并減少了內(nèi)存碎片的產(chǎn)生。同時(shí),通過共享內(nèi)存及定時(shí)檢查的方式,解決了內(nèi)存使用的高效可靠性問題。
權(quán)利要求
1.一種中間件內(nèi)存管理的方法,其特征在于包括以下步驟1)中間件應(yīng)用系統(tǒng)啟動(dòng),根據(jù)配置獲取一塊內(nèi)存區(qū)域,并初始化所述內(nèi)存區(qū)域;初始化過程包括首先彳専所述內(nèi)存區(qū)域分為結(jié)構(gòu)化區(qū)和擴(kuò)展區(qū),再彳専結(jié)構(gòu)化區(qū)分為多個(gè)固定容量大小的存儲(chǔ)單元,并設(shè)有結(jié)構(gòu)化區(qū)總體頭部信息,保存該區(qū)的存儲(chǔ)單元信息,而在擴(kuò)展區(qū)設(shè)有擴(kuò)展區(qū)總體頭部信息,在所述擴(kuò)展區(qū)總體頭部信息中包括空閑單元鏈表和已用單元鏈表;2)運(yùn)行時(shí),當(dāng)有模塊根據(jù)需要在所述內(nèi)存區(qū)域內(nèi)申請(qǐng)一定大小的內(nèi)存時(shí),需要進(jìn)行內(nèi)存分配,內(nèi)存分配過程包括判斷的步驟,即首先判斷所申請(qǐng)大小是否超過結(jié)構(gòu)化區(qū)存儲(chǔ)單元最大單元臨界值,分配的步驟,即判斷后如大小沒有超過,則在結(jié)構(gòu)化區(qū)中,按照申請(qǐng)內(nèi)存的大小查找空閑的存儲(chǔ)單元,如找到則分配成功,如沒有找到或所申請(qǐng)大小超過結(jié)構(gòu)化區(qū)存儲(chǔ)單元最大單元臨界值,則在擴(kuò)展區(qū)中查找,從空閑單元鏈表中找到一個(gè)大小足夠的單元,并彳専找到的單元拆分成兩個(gè),一個(gè)按照申請(qǐng)的大小響應(yīng)這次申請(qǐng),放入已用單元鏈表,另一個(gè)保留在空閑單元鏈表,而如果找到的這個(gè)單元大小等于申請(qǐng)內(nèi)存的大小,則不用拆分,直接放入已用單元鏈表,如從空閑單元鏈表中沒有找到大小足夠的單元,則分配失敗,響應(yīng)的步驟,即如果分配成功,則返回可用的存儲(chǔ)單元的地址,如分配失敗,則返回空值;3)步驟2中所述可用的存儲(chǔ)單元使用完畢后,需要釋放,內(nèi)存釋放的過程包括判斷的步驟,根據(jù)傳入的地址判斷屬于結(jié)構(gòu)化區(qū)還是擴(kuò)展區(qū),釋放的步驟,如屬于結(jié)構(gòu)化區(qū),則更新結(jié)構(gòu)化區(qū)的頭部信息,彳専該存儲(chǔ)單元置為空閑狀態(tài),如屬于擴(kuò)展區(qū),則彳専該存儲(chǔ)單元移出已用單元鏈表,并查看該存儲(chǔ)單元是否有相鄰的空閑單元,如有相鄰的空閑單元,則彳専該存儲(chǔ)單元和相鄰的空閑單元合并為一個(gè)單元,并修改空閑單元鏈表,更新擴(kuò)展區(qū)的頭部信息。4)當(dāng)應(yīng)用系統(tǒng)停止,清除所述內(nèi)存區(qū)域的內(nèi)容。
2.如權(quán)利要求1所述的中間件內(nèi)存管理的方法,其特征在于所述結(jié)構(gòu)化區(qū)的多個(gè)固定容量大小的存儲(chǔ)單元分別包括多種不同的容量大小,每種容量大小的存儲(chǔ)單元有多個(gè)。
3.如權(quán)利要求2所述的中間件內(nèi)存管理的方法,其特征在于所述多種容量大小的存儲(chǔ)單元中,相同容量大小的多個(gè)存儲(chǔ)單元位于同一存儲(chǔ)區(qū)域,并設(shè)有區(qū)域頭部信息。
4.如權(quán)利要求2或3所述的中間件內(nèi)存管理的方法,其特征在于所述多種容量大小的存儲(chǔ)單元的容量大小為按照倍數(shù)遞增。
5.如權(quán)利要求3所述的中間件內(nèi)存管理的方法,其特征在于所述區(qū)域頭部信息保存有該區(qū)域的存儲(chǔ)單元信息和鎖信息。
6.如權(quán)利要求3所述的中間件內(nèi)存管理的方法,其特征在于所述區(qū)域頭部信息保存有區(qū)域內(nèi)各單元的使用者ID信息和使用時(shí)間信息。
7.如權(quán)利要求1所述的中間件內(nèi)存管理的方法,其特征在于所述擴(kuò)展區(qū)的存儲(chǔ)單元生成時(shí)設(shè)有單元頭部信息,所述單元頭部信息或包括該單元的使用者ID信息和使用時(shí)間 fn息ο
8.如權(quán)利要求6或7所述的中間件內(nèi)存管理的方法,其特征在于所述中間件包括管理模塊,所述管理模塊定時(shí)檢查存儲(chǔ)單元的使用者ID信息和使用時(shí)間信息,判斷該單元是否超出使用期限,彳専長(zhǎng)時(shí)間不釋放并且使用者模塊已經(jīng)異常退出的存儲(chǔ)單元進(jìn)行釋放。
全文摘要
本發(fā)明涉及一種系統(tǒng)開發(fā)工作中的內(nèi)存管理方法。一種中間件內(nèi)存管理的方法,包括以下步驟中間件應(yīng)用系統(tǒng)啟動(dòng),根據(jù)配獲取一塊內(nèi)存區(qū)域,并初始化所述內(nèi)存區(qū)域,即所述內(nèi)存區(qū)域設(shè)為結(jié)構(gòu)化區(qū)和擴(kuò)展區(qū),結(jié)構(gòu)化區(qū)分為多個(gè)固定容量大小的存儲(chǔ)單元,設(shè)有結(jié)構(gòu)化區(qū)總體頭部信息,擴(kuò)展區(qū)設(shè)有擴(kuò)展區(qū)總體頭部信息,擴(kuò)展區(qū)總體頭部信息中包括空閑單元鏈表和已用單元鏈表;當(dāng)有模塊申請(qǐng)內(nèi)存時(shí),根據(jù)申請(qǐng)的要求進(jìn)行內(nèi)存分配;分配給內(nèi)存區(qū)域中具體的存儲(chǔ)單元,該存儲(chǔ)單元使用完畢后,進(jìn)行內(nèi)存釋放;當(dāng)應(yīng)用系統(tǒng)停止時(shí),清除所述內(nèi)存區(qū)域的內(nèi)容。本發(fā)明實(shí)現(xiàn)了內(nèi)存高效穩(wěn)定的并發(fā)訪問,為應(yīng)用系統(tǒng)開發(fā)時(shí)存在的內(nèi)存管理的問題提供了一種通用的解決辦法。
文檔編號(hào)G06F12/06GK102455976SQ20101052797
公開日2012年5月16日 申請(qǐng)日期2010年11月2日 優(yōu)先權(quán)日2010年11月2日
發(fā)明者萬英杰, 姜宇, 曹杰, 趙新陽, 韋偉 申請(qǐng)人:上海寶信軟件股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
甘肃省| 资阳市| 贵定县| 杭锦旗| 牟定县| 甘德县| 余江县| 松桃| 日照市| 元阳县| 鄂尔多斯市| 定边县| 永城市| 新干县| 遵义市| 龙岩市| 布拖县| 定襄县| 阳春市| 东乌| 广水市| 拉萨市| 镇赉县| 水富县| 渑池县| 揭阳市| 伊金霍洛旗| 神池县| 夏河县| 锡林浩特市| 昭觉县| 荆州市| 肇庆市| 措勤县| 泽普县| 定西市| 潮州市| 巴马| 平顶山市| 庆城县| 屯门区|