C++.NET的内存限制

事先举行点云的.Net程序,经常坐数据量大起Outofmemory异常,但是看任务管理器,内存还有不少剩下的,在网上搜了瞬间发现这样的解释。

无论系统内存多格外,目前一个.NET
对象极其多但会用2G内存。
于2G内存的服务器,.Net只能动用1.2G内存。
对于4G内存的服务器,.Net可使2.4G内存。

可系统要进行如下设置:
1、 在boot.ini文件被多/3GB的开关。
[boot loader]
timeout=3
default=multi(0)disk(0)rdisk(0)partition(2)/WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)/WINNT=”????” /3GB
2、在命令行窗口,进入该目录,如 cd “C:/Program Files/Microsoft Visual
Studio .NET 2003/Vc7/bin”
3、运行link命令: link -edit -LARGEADDRESSAWARE server.exe
(server.exe为你的.Net程序)
4、你的server.exe就好利用到2.4G内存了

然而增加这或多或少并没有呀卵用!更着重的凡,我通过试验获得的数码以及这个不等同,结果以及分析如下。

  • 测试代码

    int i = 0;
                List<double[]> buff = new List<double[]>();
                try
                {
                    for (i = 1; i < 1000; i++)
                    {
                        {
                            double[] a = new double[(ulong)(1024 * 1024 * 1024 / 80.0 )];
                            for (int j = 0; j < a.Length; j++)
                            {
                                a[j] = i + j;
                            }
                            buff.Add(a);
                            Console.WriteLine((0.1 * a[0]) + "G\t" + GC.GetTotalMemory(false) / 1024 / 1024.0);
                            Console.ReadKey();
                        }
                        GC.Collect();
                    }
                }
                catch(Exception e)
                {
                    Console.WriteLine(e.ToString());
                    Console.WriteLine(i * 0.1 + "G");
                }
    
  • 测试结果
    0.若不针对数组a赋值,在任务管理器里面是心有余而力不足观从内存以的。
    C++ 1

    1. Win10
      X64,2G可用/4G总内存,VS2015,X86/DEBUG编译,在1.4G过后出错
      C++ 2C++ 3
    2. Win10
      X64,2.6G可用/4G总内存,VS2015,X86/DEBUG编译,在1.5G从此出错
      C++ 4
    3. Win10
      X64,2.6G可用/4G总内存,VS2015,X86/DEBUG编译,同时运转2只,各自以1.4G/1.5G出错
      C++ 5
      C++ 6
    4. Win10
      X64,2G可用/4G总内存,VS2015,X64/DEBUG编译,在把内存和虚拟内存耗尽前都非会见错后出错
      C++ 7
      C++ 8
      末端其实还有内存消耗到4.3G以上的当儿只是因为内存耗尽,太卡了没法截图。
  • 实验分析
    1.要是无对准数组进行赋值,在职责管理器里面凡是无力回天见到从内存以的。
    2.X86模式,可采取的内存极限大概在1.4G到1.6G,而无是上述的1.2G。
    3.X64模式,在拿内存和虚拟内存耗尽前都未会见错后出错,类似于C++的new,而无是2.4G。