GetSystemInfo 與 GlobalMemoryStatus

  如果一個應用程序知道系統當前的內存狀態,它將可以較好地管理可用到的資源。WinCE實現了Win32GetSystemInfoGlobalMemoryStatus函數,GetSystemInfo函數原型如下:

1.VOID GetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

它傳遞了一個指針給SYSTEM_INFO結構,定義如下

 

wProcessorArchitecture參數表示系統微處理器的架構。它的值是定義在Winnt.h中,例如PROCESSOR_ARCHITECTURE_INTELWindows CE擴展了這些常數,包括PROCESSOR_ARCHITECTURE_ARMPROCESSOR_ARCHITECTURE_SHx,等等。增加的常數包括像Win32操作系統支持的網絡CPUnet CPU)。跳過一些參數,我們看dwProcessorType參數,它來自於特定的微處理器類型。常數有Hitachi SHx架構中的PROCESSOR_HITACHI_SH3PROCESSOR_HITACHI_SH4。最後兩個參數,wProcessorLevelwProcessorRevision,指明瞭CPU類型的特徵。wProcessorLevel參數類似於dwProcessorType參數,它一個指定的微處理器系列中被定義了,dwProcessorRevision告訴你模式(model)和芯片的步進級別(stepping level)。

 

typedef struct {

    Word wProcessorArchitecture;

    Word wReserved;

    DWORD  dwPageSize;

    LPVOID lpMinimumApplicationAddress;

    LPVOID lpMaximumApplicationAddress;

    DWORD  dwActiveProcessorMask;

    DWORD  dwNumberOfProcessors;

    DWORD  dwProcessorType;

    DWORD  dwAllocationGranularity;

    WORD  wProcessorLevel; 

    WORD  wProcessorRevision;

} SYSTEM_INFO;

 

       dwPageSize參數說明了微處理器頁面的大小,以字節爲單位。知道這個值,將會在你直接處理虛擬內存API的時候帶來方便,在此我只作簡短說明。lpMinimumApplication­AddresslpMaximumApplicationAddress參數說明了應用程序可用到的最小和最大的虛擬內存地址。dwActiveProcessorMaskdwNumberOfProcessors參數顯示被Window XP系統支持的多個處理器數量。因爲Windows CE 只支持一個處理器,所以你可以忽略這個參數。dwAllocationGranularity參數說明了一個完整的虛擬內存區域分配的界限。像Windows XPWindows CE 規定虛擬區爲64-KB的界限(譯者注:作者此處64-KB的意思是即使你只分配一個字節的內存,系統也將會保留64-KB的虛擬地址空間給它,這個值一般是由硬件代碼實現的,但是不同硬件可能不同值)。

 

2.GlobalMemoryStatus,Win32 API函數。

此函數用來獲得當前可用的物理和虛擬內存信息,函數定義爲:

VOID GlobalMemoryStatus
(
  LPMEMORYSTATUS lpBuffer
);

此函數無返回值,參數是一個指向名爲MEMORYSTATUS的結構的指針。函數的返回信息會被存儲在MEMORYSTATUS結構中。

此函數用來替代用來支持16位應用程序的GetFreeSpace函數。

應用程序應該在申請內存前調用此函數以防止影響到其他程序運行。

這個函數的返回值是動態的,並且可能返回相同的值。

關於MEMORYSTATUS結構:

機構定義:
typedef struct _MEMORYSTATUS

{ // mst
            DWORD dwLength;                           // sizeof(MEMORYSTATUS)
            DWORD dwMemoryLoad;                 // percent of memory in use
            DWORD dwTotalPhys;                     // bytes of physical memory
            DWORD dwAvailPhys;                     // free physical memory bytes
            DWORD dwTotalPageFile;              // bytes of paging file
            DWORD dwAvailPageFile;              // free bytes of paging file
            DWORD dwTotalVirtual;                // user bytes of address space
            DWORD dwAvailVirtual;               // free user bytes

} MEMORYSTATUS, *LPMEMORYSTATUS; 

結構成員的含義:
dwLength                     MEMORYSTATUS結構的大小,在調GlobalMemoryStatus函數前用sizeof()函數求得,

                                        用來供函數檢測結構的版本。

dwMemoryLoad            返回一個介於0~100之間的值,用來指示當前系統內存的使用率。

dwTotalPhys                 返回總的物理內存大小,以字節(byte)爲單位。

dwAvailPhys                 返回可用的物理內存大小,以字節(byte)爲單位。

dwTotalPageFile           顯示可以存在頁面文件中的字節數。注意這個數值並不表示在頁面文件在磁盤上的真實物理大小。

dwAvailPageFile           返回可用的頁面文件大小,以字節(byte)爲單位。

dwTotalVirtual              返回調用進程的用戶模式部分的全部可用虛擬地址空間,以字節(byte)爲單位。

dwAvailVirtual              返回調用進程的用戶模式部分的實際自由可用的虛擬地址空間,以字節(byte)爲單位。

MEMORYSTATUS結構,
結構的定義如下:
MEMORYSTATUS STRUCT
  dwLength                    DWORD      ;本結構的長度
  dwMemoryLoad           DWORD      ;已用內存的百分比
  dwTotalPhys                DWORD      ;物理內存總量
  dwAvailPhys                DWORD      ;可用物理內存
  dwTotalPageFile          DWORD      ;交換文件總的大小
  dwAvailPageFile          DWORD      ;交換文件中空閒部分大小
  dwTotalVirtual             DWORD      ;用戶可用的地址空間
  dwAvailVirtual             DWORD      ;當前空閒的地址空間
MEMORYSTATUS ENDS

 

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