GetSystemInfo 与 GlobalMemoryStatus

来源:互联网 发布:网络胜利组网盘 编辑:程序博客网 时间:2024/05/22 11:32

  如果一个应用程序知道系统当前的内存状态,它将可以较好地管理可用到的资源。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

 

原创粉丝点击