b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

基于32位系统的系统开发,程序还没跑起来就被终止了

电脑杂谈  发布时间:2021-02-23 21:03:38  来源:网络整理

我最近正在研究一个程序。尽管它是一个小程序,但它占用大量内存,可以轻松达到10G。它可以在64位系统上轻松实现,但是我正在基于32位系统上进行开发,并且该程序在运行之前已终止。

我尝试了许多方法,包括文件内存映射等,但是效率不高,并且由于32位应用程序的限制,最大可用内存地址只能是0x7FFFFFFF,而可以限制为2G。最终,我终于找到了AWE(地址窗口扩展)。

AWE是Windows内存管理功能的一组扩展。它允许应用程序获取物理内存,然后将非分页内存的视图动态映射到32位地址空间。尽管32位地址空间限制为4GB,但非分页内存可能比4GB大得多。这样,需要大量内存的应用程序(例如大型系统)可以使用比32位地址空间支持的内存大得多的内存。

稍后将介绍与AWE相关的功能。

为了使用大容量存储器,除了使用AWE之外,还有一点不可少的东西,那就是PAE(物理地址扩展)。 PAE是基于x86的服务器的功能,它使运行Windows Server 2003,Enterprise Edition和Windows Server 2003,Datacenter Edition的计算机可以支持4 GB以上的物理内存。物理地址扩展(PAE)允许将多达64 GB的物理内存用作常规的4 KB页面,并将内核可用于将物理内存地址扩展的位数从32扩展到36。

在正常情况下,Windows系统的PAE无效。只有在打开PAE之后,Windows系统才能识别4G以上的内存。在使用boot.int的系统中,要启动PAE,必须在boot.ini中添加/ PAE选项。在Windows Vista和Windows 7中,必须修改内核文件并设置BCD启动项。对于Vista和Win7系统,可以使用Ready For 4GB软件直接完成此操作。有关特定方法,请参见Ready For 4GB软件说明。以下是打开/ PAE选项的boot.ini文件的示例:

本文将以Windows 7 Ultimate为例,介绍如何在启用PAE的情况下使用AWE达到在程序中使用2G以上内存的目的。下图显示了在打开PAE和未打开PAE时系统识别的内存容量的差异。

图一.打开PAE

开启PAE

图二.关闭PAE

32位系统突破内存限制_win server 2003 32位程序 内存_32位程序内存限制

关闭PAE

如果未打开PAE,则系统只能识别3G内存,最多0. 5G不到,因此即使您使用AWE,因为系统和其他应用程序已经占用了一部分内存,剩下的内存可能只是2G多一点,没有太大的改进。只有当系统识别出4G以上的内存时,AWE才能发挥真正的作用。

让我们看一下Windows中提供的AWE API函数,它们都是在winbase.h中定义的。

从winbase.h中的定义可以看出,仅当系统版本大于或等于0x0500时,才可以使用AWE。下表中显示了每个版本的_WIN32_WINNT值。 AWE不能用于Windows 2000以下的版本。

需要最少的系统

_WIN32_WINNT和WINVER的最小值

Windows7

0x0601

Windows Server2008

0x0600

WindowsVista

0x0600

带有SP1的Windows Server2003,带有SP2的WindowsXP

0x0502

Windows Server2003,WindowsXP

0x0501

Windows2000

0x0500

如果您的系统版本符合要求,但是编译器在编译添加了AWE API的代码时出错,则可以将以下代码添加到程序头文件中。

下面简要介绍每个API的功能。

在查看示例程序之前,仍然需要进行一些设置,并且需要设置系统的本地安全策略。在win7中,打开“控制面板->系统和安全性->管理工具->本地安全策略”,将当前用户添加到“锁定内存页面”,然后退出并重新启动(通常,如果不重新启动,它将不会生效!)

本地安全策略

在进行了前面的准备之后(再说一遍:确认您的计算机具有4G或更多的内存;打开PAE以使系统识别4G或更多的内存;设置本地安全策略),我们可以通过以下操作:代码进行实验。

该代码是从MSDN中的AWE示例中修改的。有关特定过程,请参见代码中的注释。如果您对本示例的源代码感兴趣,则可以参考MSDN。

程序运行结果如下:

程序结果

可以看出,系统页面大小为4K,总共请求了655,360页,即2. 5G。每个分页成员占用4个字节,共2621440个字节。 2. 5G内存分为512M块的5个段,并且成功写入和读取了字符串。

在调试过程中,执行AllocateUserPhysicalPages函数后设置一个断点,检查任务管理器,可以看到成功分配物理内存后,实际的物理内存已占用2. 5G,从而验证了AWE。

内存消耗

通过上面的示例,我们成功地在32位系统中识别了4G内存,并在32位程序中成功使用了2G以上的内存。借助PAE和AWE,即使在32位系统上,我们也可以成功开发消耗大量内存的应用程序,而无需依赖64位平台。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-360136-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...