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

为什么32位程序只能使用最大2GB内存?(图)(2)

电脑杂谈  发布时间:2021-05-29 18:05:20  来源:网络整理

程序运行结果如下:

32位系统设置最大内存

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

调试过程中,在执行AllocateUserPhysicalPages函数后设置断点,查看任务管理器,可以看到物理内存分配成功后,实际占用物理内存2.5G,从而验证效果敬畏。

32位系统设置最大内存

通过上面的示例,我们成功地在32位系统中确定了4G内存,并在32位程序中成功使用了2G以上的内存。在PAE和AWE的帮助下,即使在32位系统上,我们也可以在不依赖64位平台的情况下,成功开发出消耗大量内存的应用。

解决方案

默认情况下,32个程序的内存地址空间只有2G。这2G内存除了存储程序数据,还需要存储程序本身。根据经验,一旦程序使用了超过1G的内存,它将不稳定。

方案 1:流程拆分

将程序的内存消耗功能拆分为单独的进程。这种方法目前被用于各种项目的开发中。但有时可能会出现无法拆分的功能(如数据浏览),或者拆分后主进程使用时间长或内存溢出。因此,该方案并不能完全解决内存溢出问题。

方案二:突破2G限制

通过开启/largeaddressaware,突破单进程2G限制(理论上最大4G虚拟地址空间)。

2.2.1 如何操作

具体操作方法:

方法一:在命令行依次执行以下几行命令

cd C:\ Program Files(x8 6) \ Microsoft Visual Studio 1 1. 0 \ VC \ bin

vcvars32.bat

editbin /largeaddressawrexx.exe

方法二:在VS(以VS2012为例)项目属性->Generate Event->Post-Generate Event Command Line中设置如下命令行:

调用"%VS110COMNTOOLS%..\tools\vsvars32.bat"

editbin /largeaddressaware$(TargetPath)

说明:方法一需要在每次编译后执行相关命令;方法二在VS编译后自动完成相关设置操作,使用方便。

2.2.2 测试程序

以下是编写测试程序的示例:

测试程序:通过编写如下程序进行测试,在exe中分配大量内存,并将错误信息输出到日志中

      static void Main(string[] args)
        {
            try
            {
                int count = 100000000;
                List lst = newList(count);
                for (int i = 0; i < count;i++)
                {
                    lst.Add(new int[1000000]);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error.Append(ex);
            }
 
         }

1)未突破2G限制的日志信息如下:

19:33:07:849

System.OutOfMemoryException:抛出“System.OutOfMemoryException”类型的异常。

19:33:07:855

当前专用内部大小:1.69 GB

当前虚拟内存大小:1.94 GB

最大虚拟内存量:1.94 GB

物理内存总大小:4 GB

可用物理内存大小:4 GB

虚拟内存总大小:2 GB

可用虚拟内存大小:62.31 MB

交换空间的总大小:4 GB

可用交换空间大小:4 GB

2)突破4G限制的日志信息如下:

19:33:45:371

System.OutOfMemoryException:抛出“System.OutOfMemoryException”类型的异常。

19:33:45:377

当前专用内部大小:3.59 GB

当前虚拟内存大小:3.9 GB

最大虚拟内存量:3.91 GB

物理内存总大小:4 GB

可用物理内存大小:4 GB

虚拟内存总大小:4 GB

可用虚拟内存大小:105.38 MB

交换空间的总大小:4 GB

可用交换空间大小:4 GB

结论

综上所述,通过方案一和方案二的结合,可以完美解决32位程序的内存溢出问题(当然,如果这个程序占用的内存达到3G以上,还是容易出现到问题,那么就需要从程序本身来优化了)。

[转载]


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

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

    • 祖丁
      祖丁

      你把发行股票圈的钱回购回去

    • 万学青
      万学青

      感觉千玺和里面的小王子形象好贴近

    每日福利
    热点图片
    拼命载入中...