C#編程-48:文本控件復習筆記_彭世瑜_新浪博客
1171
2022-05-28
一、頁交換文件
虛擬地址空間只是操作系統為進程“虛擬”出來的一塊地址區域,并不代表任何實際的空間。而“頁交換文件”卻對應了實際的空間,這個空間一般是磁盤上名為“pagefile.sys”的文件。
“頁交換文件”的大小和位置可以在系統設置(系統屬性 -> 高級 -> 性能 -> 設置 -> 高級?)中進行設置:
從微軟的官方文檔來看,“虛擬內存”等于“物理內存”+“分頁文件”總和。可以把“虛擬內存”理解為Windows的一種內存管理機制。
二、虛擬地址空間、頁交換文件、物理內存
虛擬地址空間、頁交換文件、物理內存三者的關系如下圖:
《Windows核心編程》第13章關于“物理存儲器和頁交換文件”章節中講到了“頁交換文件、物理存儲器之間的數據交換過程”,流程如下:
應用程序從進程的虛擬地址空間預定并調撥了一塊地址區域時,起初這塊區域只是從“頁交換文件”中調撥的,這樣作有個好處就是:因為還不確定何時才會使用這塊區域,如果立即從物理內存調撥,會將占用很多的物理內存。
當程序讀寫該地址區域時,此時就會出現上面圖上的頁交換文件和物理內存之間的數據交換過程。
三、將頁面鎖定在物理內存
從上面的幾節我們知道,當物理內存中沒有閑置頁面時,系統會將內存中的某些頁面的數據寫入到交換文件中,從而將該物理內存區域釋放出來供后面的程序使用。
我們可以通過調用VirtualLock方法,將頁面鎖定在物理內存中,從而防止虛擬內存管理機制將頁面交換至頁面文件,而引起不必要的硬盤和物理內存之間的低效頁面交換。
也可以通過調用VirtualUnlock方法解鎖頁面,允許系統對頁面進行交換操作。
需要注意的是,鎖定頁面時系統會根據當前可用實際物理內存情況,以及進程工作集配額判定當前最大可鎖定的頁面的實際數量,超過此數量會引起一個錯誤。我們可以調用SetProcessWorkingSetSize可以改變一個進程工作集大小的配額,從而可以鎖定更多的物理頁面。
windows
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。