Windows核心編程 - 探索虛擬內存

1. 系統信息

    操作系統中有很多參數是由系統所運行的主機所決定的,如頁面大小和分配粒度等,可使用GetSystemInfo函數來獲取與主機相關的參數。爲了讓32位應用程序能夠在64位版本Windows上運行,Microsoft提供了一個稱爲Windows 32-bit On Windows 64-bit的模擬層,稱爲WOW64。當32位應用程序在WOW64上運行時,調用GetSystemInfo返回的值和64位應用程序調用GetSystemInfo所返回的值可能會有所不同。如果想知道進程是否在WOW64上運行,可調用IsWow64Process函數,只有當32位應用程序在WOW64上運行時,該函數的pbWow64Process參數纔會被置爲TRUE。如想獲取原來的系統信息,可調用GetNativeSystemInfo函數 。

2.虛擬內存狀態

     可通過GlobalMemoryStatus函數來取得當前內存狀態的動態信息。如果 預計應用會在裝有4GB內存的機器上運行,或者頁交換文件的大小可能會大於4GB,則應該調用GlobalMemoryStatusEx函數。

3.NUMA機器中的內存管理

     非統一內存訪問(Non-Uniform Memory Access , NUMA)機器中的CPU既能訪問自己節點的內存,也可以訪問其它節點的內存,調用GetNumaProcessNode函數可以知道一個CPU駐留在哪個NUMA節點中。

4.確定地址空間的狀態

    可通過調用VirtualQuery函數查詢與地址空間中的內存地址有關的特定信息,比如大小、存儲器類型以及保護屬性。還有另一個函數 VirtualQueryEx可以查詢另一個進程的內存信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章