位址視窗擴充套件 AWE

2021-10-10 19:47:30 字數 1291 閱讀 5738

位址視窗擴充套件是為了幫助那些32位址空間不足的程式的 簡稱awe目標有兩個

1.允許應用程式以一種特殊的方式分配記憶體,作業系統保證不會將以這種方式分配的記憶體換出到磁碟

2.允許應用程式訪問比程序位址空間還要多的記憶體

基本上,awe提供了一種方式,可以讓應用程式分配一塊或者多塊記憶體,當一開始分配的時候,在程序的位址空間中是看不見這些記憶體塊的。應用程式然後(通過呼叫virtualalloc)預定位址空間區域,這就是位址視窗。應用程式然後呼叫乙個函式,每呼叫一次把一塊記憶體指定到該位址視窗。把記憶體塊指定到位址視窗是非常快的。

很明顯,通過乙個位址視窗,同一時間只能訪問一塊記憶體,由於開發人員必須在需要的時候編寫,顯示地在**中呼叫函式來把不同的記憶體塊指定到位址視窗中,因此這使得**更加**編寫

void

testawe(void)

作業系統會給每個頁面指定乙個頁框號,系統在分配記憶體頁面時,會將每個記憶體頁面的頁框號儲存到prampages引數所指向的陣列中。頁框號本身對應用程式是沒有什麼作用的,因此我們沒有必要頁不應該取讀取該陣列中的內容。

注意:我們及不知道哪個記憶體頁面被分配給這塊區域,也不關心這個問題,當記憶體塊中的頁面通過位址視窗顯示出來時,它們看起來就像一塊連續的記憶體。這一方面減輕了開發人員的負擔,因為我們不必理解系統記憶體到底在做什麼,另一方面也使得記憶體更容易使用,

當函式返回的時候,第二個引數指向的值表示函式成功分配的頁面的數量。這個值小於等於我們傳入的值。

只有當前程序才能使用通過allocateuserphysicalpages分配大的記憶體頁面,awe不允許把記憶體頁面對映到其他程序大的位址空間中,因此,我們不能在程序間共享記憶體塊

說明:我們必須具備記憶體中鎖定頁面使用者許可權,才呼叫函式

建立乙個位址視窗並分配一塊記憶體之後,接下來呼叫mapuserphysicalpages把記憶體塊指定給位址視窗。

bool

winapi

mapuserphysicalpages(

in pvoid virtualaddress,

//表示位址視窗的怩位址

in ulong_ptr numberofpages,

//表示通過該位址視窗看到多少個頁面的記憶體

in_reads_opt(numberofpages) pulong_ptr pagearray

//表示要通過該位址視窗看到那些頁面的記憶體

);//如果位址視窗的大小小於我們要看到的視窗,則會失敗

我們可以把這些記憶體塊指定給任何乙個位址視窗,但系統不允許乙個記憶體塊中同時出現兩個位址視窗。

awe在x64的作用在於可以分配非交換記憶體。

擴充套件IP位址筆記

內部本地和外部全域性,是通訊中正式的真正源 目的位址內部全域性和外部本地是在nat過程中的乙個中間量 ip nat inside source static 192.168.1.2 202.2.2.252 將從內部網路出去外部網路的資料報的源ip位址進行內部本地 內部全域性的靜態轉 換ip nat ...

動畫視窗擴充套件的實現

程式設計原理 要實現這種動畫視窗的程式設計效果,主要用到windows api中的animatewindow函式,通過在視窗的建立或消毀過程中運用該函式,來實現開啟和關閉程式時達到所希望的動畫視窗效果。animatewindow函式所提供的動畫效果十分豐富,我們可以在自己的程式中選擇各種不同的動畫效...

Unity 擴充套件彈出選單視窗

unity 編輯器下提供了系統級的選單彈窗,會阻塞訊息,卡住渲染,以及不能進行搜尋等功能,而它自己有非阻塞版本的彈窗,但不開放給使用者使用,比如這個介面 genericmenu的unity風格版本 public class genericpopupmenu popupwindowcontent pr...