CE下查看系统内存的方法

如果一个应用程序知道系统当前的内存状态,它将可以较好地管理可用到的资源。WinCE实现了Win32的GetSystemInfo和GlobalMemoryStatus函数,GetSystemInfo函数原型如下:

VOID GetSystemInfo (LPSYSTEM_INFO lpSystemInfo);

它传递了一个指针给SYSTEM_INFO结构,定义如下




wProcessorArchitecture参数表示系统微处理器的架构。它的值是定义在Winnt.h中,例如PROCESSOR_ARCHITECTURE_INTEL。Windows CE扩展了这些常数,包括PROCESSOR_ARCHITECTURE_ARM,PROCESSOR_ARCHITECTURE_SHx,等等。增加的常数包括像Win32操作系统支持的网络CPU(net CPU)。跳过一些参数,我们看dwProcessorType参数,它来自于特定的微处理器类型。常数有Hitachi SHx架构中的PROCESSOR_HITACHI_SH3和PROCESSOR_HITACHI_SH4。最后两个参数,wProcessorLevel和wProcessorRevision,指明了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­Address和lpMaximumApplicationAddress参数说明了应用程序可用到的最小和最大的虚拟内存地址。dwActiveProcessorMask和dwNumberOfProcessors参数显示被Window XP系统支持的多个处理器数量。因为Windows CE 只支持一个处理器,所以你可以忽略这个参数。dwAllocationGranularity参数说明了一个完整的虚拟内存区域分配的界限。像Windows XP,Windows CE 规定虚拟区为64-KB的界限(译者注:作者此处64-KB的意思是即使你只分配一个字节的内存,系统也将会保留64-KB的虚拟地址空间给它,这个值一般是由硬件代码实现的,但是不同硬件可能不同值)。

       第二个方便的检测系统状态的函数如下:

void GlobalMemoryStatus(LPMEMORYSTATUS lpmst);

它返回一个MEMORYSTATUS结构,定义为

typedef struct {

    DWORD dwLength;

    DWORD dwMemoryLoad;

    DWORD dwTotalPhys;

    DWORD dwAvailPhys;

    DWORD dwTotalPageFile;

    DWORD dwAvailPageFile;

    DWORD dwTotalVirtual;

    DWORD dwAvailVirtual;

} MEMORYSTATUS;

    dwLength参数在调用这个函数之前必须初始化。dwMemoryLoad参数是一个不确定的值;这是一个可用的一般性的参数指示了当前系统的内存使用情况(译者注:该参数是一个近似的百分比值,指明了物理内存的使用情况)。dwTotalPhys和dwAvailPhys参数指明了RAM有多少页被分配给了程序存储区RAM,和还有多少可用(译者注:实际上是以字节为单位)。这些值不包括分配对象存储区的RAM。

       dwTotalPageFile和dwAvailPageFile参数在Windows XP下和Windows Me下指明了当前页面文件(paging file)的状态。因为Windows CE不支持页面文件,所以这些参数总是0。dwTotalVirtual和dwAvailVirtual参数指明了总共的和可用的可被应用程序存取的虚拟内存页的数量(译者注:参数都是以字节为单位,而不是指页数,dwAvailVirtual是指未保留和未提交的内存)。

       通过GlobalMemoryStatus返回的信息可以验证Windows CE内存结构,通过在有32MBRAM的HP iPaq Pocket PC上调用函数,返回值如下:

dwMemoryLoad       0x18          (24)

dwTotalPhys        0x011ac000    (18,530,304)

dwAvailPhys        0x00B66000    (11,952,128)

dwTotalPageFile    0

dwAvailPageFile    0

dwTotalVirtual     0x02000000    (33,554,432)

dwAvailVirtual     0x01e10000    (31,522,816)



    dwTotalPhys参数表明了系统的32MB RAM,分配了18.5MB给程序存储区RAM,其中12MB仍然可用。注意这对应用程序来说,并不是通过这次调用,就知道了另外14MB的RAM是分配给对象存储区的。要检测分配给对象存储区的RAM的大小,要使用GetStoreInformation。

       dwTotalPageFile和dwAvailPageFile参数是0,表明页面文件不被Windows CE所支持。dwTotalVirtual参数十分有趣,因为它显示了Windows CE 强制给程序的32-MB的虚拟内存限制。其间,dwAvailVirtual参数显示了只使用了32MB虚拟内存的一小部分

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值