2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、引言引言Windows的內(nèi)存結(jié)構(gòu)是深入理解Windows操作系統(tǒng)如何運(yùn)作的最關(guān)鍵之所在,通過對(duì)內(nèi)存結(jié)構(gòu)的認(rèn)識(shí)可清楚地了解諸如進(jìn)程間數(shù)據(jù)的共享、對(duì)內(nèi)存進(jìn)行有效的管理等問題,從而能夠在程序設(shè)計(jì)時(shí)使程序以更加有效的方式運(yùn)行。Windows操作系統(tǒng)對(duì)內(nèi)存的管理可采取多種不同的方式,其中虛擬內(nèi)存的管理方式可用來管理大型的對(duì)象和結(jié)構(gòu)數(shù)組。在Windows系統(tǒng)中,任何一個(gè)進(jìn)程都被賦予其自己的虛擬地址空間,該虛擬地址空間覆蓋了一個(gè)相當(dāng)大的范圍,對(duì)于32

2、位進(jìn)程,其地址空間為232=4294967296Byte,這使得一個(gè)指針可以使用從0x00000000到0xFFFFFFFF的4GB范圍之內(nèi)的任何一個(gè)值。雖然每一個(gè)32位進(jìn)程可使用4GB的地址空間,但并不意味著每一個(gè)進(jìn)程實(shí)際擁有4GB的物理地址空間,該地址空間僅僅是一個(gè)虛擬地址空間,此虛擬地址空間只是內(nèi)存地址的一個(gè)范圍。進(jìn)程實(shí)際可以得到的物理內(nèi)存要遠(yuǎn)小于其虛擬地址空間。進(jìn)程的虛擬地址空間是為每個(gè)進(jìn)程所私有的,在進(jìn)程內(nèi)運(yùn)行的線程對(duì)內(nèi)存空間

3、的訪問都被限制在調(diào)用進(jìn)程之內(nèi),而不能訪問屬于其他進(jìn)程的內(nèi)存空間。這樣,在不同的進(jìn)程中可以使用相同地址的指針來指向?qū)儆诟髯哉{(diào)用進(jìn)程的內(nèi)容而不會(huì)由此引起混亂。下面分別對(duì)虛擬內(nèi)存的各具體技術(shù)進(jìn)行介紹。地址空間中區(qū)域的保留與釋放地址空間中區(qū)域的保留與釋放在進(jìn)程創(chuàng)建之初并被賦予地址空間時(shí),其虛擬地址空間尚未分配,處于空閑狀態(tài)。這時(shí)地址空間內(nèi)的內(nèi)存是不能使用的,必須首先通過VirtualAlloc()函數(shù)來分配其內(nèi)的各個(gè)區(qū)域,對(duì)其進(jìn)行保留。Virt

4、ualAlloc()函數(shù)原型為:LPVOIDVirtualAlloc(LPVOIDlpAddressDWDdwSizeDWDflAllocationTypeDWDflProtect)其參數(shù)lpAddress包含一個(gè)內(nèi)存地址,用于定義待分配區(qū)域的首地址。通??蓪⒋藚?shù)設(shè)置為NULL,由系統(tǒng)通過搜索地址空間來決定滿足條件的未保留地址空間。這時(shí)系統(tǒng)可從地址空間的任意位置處開始保留一個(gè)區(qū)域,而且還可以通過向參數(shù)flAllocationType設(shè)

5、置MEM_TOP_DOWN標(biāo)志來指明在盡可能高的地址上分配內(nèi)存。如果不希望由系統(tǒng)自動(dòng)完成對(duì)內(nèi)存區(qū)域的分配而為lpAddress設(shè)定了內(nèi)存地址(必須確保其始終位于進(jìn)程的用戶模式分區(qū)中,否則將會(huì)導(dǎo)致分配的失敗),那么系統(tǒng)將在進(jìn)行分配之前首先檢查在該內(nèi)存地址上是否存在足夠大的未保留空間,如果存在一個(gè)足夠大的空閑區(qū)域,那么系統(tǒng)將會(huì)保留此區(qū)域并返回此保留區(qū)域的虛擬地址,否則將導(dǎo)致分配的失敗而返回NULL。這里需要特別指出的是,在指定lpAddre

6、ss的內(nèi)存地址時(shí),必須確保是從一個(gè)分配粒度的邊界處開始。一般來說,在不同的CPU平臺(tái)下分配粒度各不相同,但目前所有Windows環(huán)境下的CPU如x86、32位Alpha、64位Alpha以及IA64等均是采用64KB的分配粒度。如果保留區(qū)域的起始地址沒有遵循從64KB分配粒度的邊界開始之一原則,系統(tǒng)將自動(dòng)調(diào)整該地址到最接近的64K的倍數(shù)。例如,如果指定的lpAddress為0x00781022,那么此保留區(qū)域?qū)嶋H是從0x00780000

7、開始分配的。參數(shù)dwSize指定了保留區(qū)域的大小。但是系統(tǒng)實(shí)際保留的區(qū)域大小必須是CPU頁面大小的整數(shù)倍,如果指定的dwSize并非CPU頁面的整數(shù)倍,系統(tǒng)將自動(dòng)對(duì)其進(jìn)行調(diào)整,使其達(dá)到與之最接近的頁面大小整數(shù)倍。與分配粒度一樣,對(duì)于不同的CPU平臺(tái)其頁面大小也是不一樣的。在x86平臺(tái)下,頁面大小為4KB,在可以訪問區(qū)域中的內(nèi)存地址。在提交過程中,物理存儲(chǔ)器是按頁面邊界和頁面大小的塊來進(jìn)行提交的。若要為一個(gè)已保留的地址空間區(qū)域提交物理存儲(chǔ)

8、器,需要再次調(diào)用VirtualAlloc()函數(shù),所不同的是在執(zhí)行物理存儲(chǔ)器的提交過程中需要指定flAllocationType參數(shù)為MEM_COMMIT標(biāo)志,使用的保護(hù)屬性與保留區(qū)域時(shí)所用保護(hù)屬性一致。在提交時(shí),可以將物理存儲(chǔ)器提交給整個(gè)保留區(qū)域,也可以進(jìn)行部分提交,由VirtualAlloc()函數(shù)的lpAddress參數(shù)和dwSize參數(shù)指明要將物理存儲(chǔ)器提交到何處以及要提交多少物理存儲(chǔ)器。與保留區(qū)域的釋放類似,當(dāng)不再需要訪問保留

9、區(qū)域中被提交的物理存儲(chǔ)器時(shí),提交的物理存儲(chǔ)器應(yīng)得到及時(shí)的釋放。該回收過程與保留區(qū)域的釋放一樣也是通過VirtualFree()函數(shù)來完成的。在調(diào)用時(shí)為VirtualFree()的dwFreeType參數(shù)指定MEM_DECOMMIT標(biāo)志,并在參數(shù)lpAddress和dwSize中傳遞用來標(biāo)識(shí)要解除的第一個(gè)頁面的內(nèi)存地址和要釋放的字節(jié)數(shù)。此回收過程同樣也是以頁面為單位來進(jìn)行的,將回收設(shè)定范圍所涉及到的所有頁面。下面這段代碼演示了對(duì)先前保留區(qū)

10、域的提交過程,并在使用完畢后將其回收:在地址空間中保留一個(gè)區(qū)域LPBYTEbBuffer=(LPBYTE)VirtualAlloc(NULL65536MEM_RESERVEPAGE_READWRITE)提交物理存儲(chǔ)器VirtualAlloc(bBuffer65536MEM_COMMITPAGE_READWRITE)……回收提交的物理存儲(chǔ)器VirtualFree(bBuffer65536MEM_DECOMMIT)釋放已保留的區(qū)域Virtu

11、alFree(bBuffer0MEM_RELEASE)由于未經(jīng)提交的保留區(qū)域?qū)嶋H是無法使用的,因此在編程過程中允許通過一次VirtualAlloc()調(diào)用而完成對(duì)地址空間的區(qū)域保留及對(duì)保留區(qū)域的物理存儲(chǔ)器的提交。相應(yīng)的,回收、釋放過程也可由一次VirtualFree()調(diào)用來實(shí)現(xiàn)。上述代碼可按此方法改寫為:在地址空間中保留一個(gè)區(qū)域并提交物理存儲(chǔ)器LPBYTEbBuffer=(LPBYTE)VirtualAlloc(NULL65536ME

12、M_RESERVE|MEM_COMMITPAGE_READWRITE)……釋放已保留的區(qū)域并回收提交的物理存儲(chǔ)器VirtualFree(bBuffer0MEM_RELEASE|MEM_DECOMMIT)頁文件的使用頁文件的使用在前面曾多次提到物理存儲(chǔ)器,這里所說的物理存儲(chǔ)器并不局限于計(jì)算機(jī)內(nèi)存,還包括在磁盤空間上創(chuàng)建的頁文件,其存儲(chǔ)空間大小為計(jì)算機(jī)內(nèi)存和頁文件存儲(chǔ)容量之和。由于通常情況下磁盤存儲(chǔ)空間要遠(yuǎn)大于內(nèi)存的存儲(chǔ)空間,因此頁文件的使

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論