Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法在vc+;中分配1.5GB内存+;mfc应用程序_C++_Windows_Visual Studio 2010_Malloc - Fatal编程技术网

C++ 无法在vc+;中分配1.5GB内存+;mfc应用程序

C++ 无法在vc+;中分配1.5GB内存+;mfc应用程序,c++,windows,visual-studio-2010,malloc,C++,Windows,Visual Studio 2010,Malloc,我有用VS2010编写的MFC vc++应用程序。 当我尝试使用 malloc:它返回NULL 新操作符:它抛出CMemoryException 但是,当我在C++中编写独立的Win32控制台应用程序时,像这样: double *ptr = NULL; ptr = new double[185000000]; 它工作正常,ProcessExplorer应用程序显示约1411MB内存 我的MFC应用程序添加了GUI和大量库,用于安捷伦电表和NI-6255电表电压测量。以下链接基本上解决了这个问题

我有用VS2010编写的MFC vc++应用程序。 当我尝试使用

  • malloc:它返回NULL
  • 新操作符:它抛出CMemoryException
  • 但是,当我在C++中编写独立的Win32控制台应用程序时,像这样:

    double *ptr = NULL;
    ptr = new double[185000000];
    
    它工作正常,ProcessExplorer应用程序显示约1411MB内存


    我的MFC应用程序添加了GUI和大量库,用于安捷伦电表和NI-6255电表电压测量。

    以下链接基本上解决了这个问题:

    在64位系统上,32位程序的内存可达2GB。 在此限制下,如果加载了其他DLL,则内存会变得支离破碎,连续地址空间不可用。因此,1.5GB分配失败

    在vs项目设置中启用大地址空间标志,最高可达4GB


    除此之外,程序需要64位编译。

    您的MFC应用程序编译为32位还是64位?请记住,如果您的进程是32位进程,那么它只有2Gb的地址空间可供使用。我猜加载到进程地址空间中的附加DLL会导致足够的碎片,以至于它们不会留下1.5 GB的可用连续空间。如果您的应用程序是32位的,但实际上将在64位系统上运行,则可能有一种简单的方法来解决此问题-请参阅。是的,我的应用程序是32位的,运行在x64 16GB RAM系统上。。那么我应该尝试在64位模式下构建它吗?是的,有很多与MFC相关的dll加载,还有安捷伦仪表和NI仪表库。旁注:我如何找出哪些DLL与我的应用程序相关?我有两个观察结果:1。独立应用程序可以在不启用任何选项的情况下分配~1411 MB内存。但是不能超过2GB,除非我按照bogdan的建议启用了大地址空间。要超过4GB,我需要以64位模式构建独立应用程序。2.对于MFC应用程序,我需要启用大地址空间以获得~1411MB,但它不能超过2GB。我将以x64模式构建它。您可以尝试使用64位,但您的代码和所有相关库都需要支持该配置。如果不是这样的话,事情可能会变得糟糕。我在上面的评论中提到的解决方案的优点是非常简单(只需更改一个链接器开关),因为您的应用程序仍然是32位的。关于第二个问题,可以在VisualC++调试程序中运行程序,使用<代码>调试> > Windows >模块>代码>;您还可以使用其他工具。